php+mysql数据库里面一个字段值的调用和显示问题,在线等!
表名timu,字段名xuanxiang,字段的值是:a:4:{i:1;a:2:{s:1:"k";i:1;s:2:"xx";s:1:"你";}i:2;a:2:{s:1:"k...
表名timu,字段名xuanxiang,字段的值是:
a:4:{i:1;a:2:{s:1:"k";i:1;s:2:"xx";s:1:"你";}i:2;a:2:{s:1:"k";i:2;s:2:"xx";s:1:"我";}i:3;a:2:{s:1:"k";i:3;s:2:"xx";s:2:"你们";}i:4;a:2:{s:1:"k";i:4;s:2:"xx";s:2:"我们";}}
这个调用出来以后怎么显示成下面的格式:
A、你
B、我
C、你们
D、我们
php的代码,麻烦高手指教,非常非常感谢! 展开
a:4:{i:1;a:2:{s:1:"k";i:1;s:2:"xx";s:1:"你";}i:2;a:2:{s:1:"k";i:2;s:2:"xx";s:1:"我";}i:3;a:2:{s:1:"k";i:3;s:2:"xx";s:2:"你们";}i:4;a:2:{s:1:"k";i:4;s:2:"xx";s:2:"我们";}}
这个调用出来以后怎么显示成下面的格式:
A、你
B、我
C、你们
D、我们
php的代码,麻烦高手指教,非常非常感谢! 展开
1个回答
展开全部
【思路】
取值,解析成数组,循环输出
【效果】
【PHP】
<?php
header('Content-type:text/html; charset=utf-8');
/**
* special_str_to_arr 转为数组
* 2014-12-03
*
* @author Rudon <285744011@qq.com>
* @param string $str
* @return array $return
*/
function special_str_to_arr ($str) {
$return = array();
if (!is_string($str) || trim($str) == '') {
return $return;
}
/* 格式化 */
$human_preg = '/([a-zA-Z\d]+):/i';
$human_str = preg_replace($human_preg, '', $str); // DEMO1
$human_str = str_replace(';{', ':{', $human_str); // DEMO2
$human_str = str_replace(';}', '}', $human_str); // DEMO3
$human_str = preg_replace('/";(["\d]+)/i', '":$1', $human_str); // DEMO4
$human_str = preg_replace('/\}(\d+)/i', '},$1', $human_str); // DEMO5
$human_str = str_replace(';"', ',"', $human_str); // DEMO6
$human_str = preg_replace('/([^\d])(\d+):/i', '$1"$2":', $human_str); // DEMO7
/* 字符串转数组 */
$arr = json_decode($human_str, true);
if (is_array($arr) && count($arr)) {
$return = $arr; // DEMO8
}
return $return;
}
/**
* get_upper_abc_by_i 通过数字取大写字母 4=>D 1=>A
* 2014-12-03
*
* @author Rudon <285744011@qq.com>
* @param int $n
* @return string $return
*/
function get_upper_abc_by_i ($n = 1) {
$return = '';
if(is_int($n) && $n > 0 && $n <= 26) {
$return = chr(ord('A') + $n - 1);
}
return $return;
}
/* 从字段取出字符串 */
$xuanxiang_str = 'a:4:{i:1;a:2:{s:1:"k";i:1;s:2:"xx";s:1:"你";}i:2;a:2:{s:1:"k";i:2;s:2:"xx";s:1:"我";}i:3;a:2:{s:1:"k";i:3;s:2:"xx";s:2:"你们";}i:4;a:2:{s:1:"k";i:4;s:2:"xx";s:2:"我们";}}';
$options = special_str_to_arr($xuanxiang_str); // DEMO8 数组
// print_r($arr);die;
/* 增加选项对应的字母 */
if (count($options)) {
foreach ($options as $k => $v) {
$n = intval($v['k']); // 第几个选项
$letter = get_upper_abc_by_i($n); // 对应字母
$options[$k]['letter'] = $letter; // 每个选项都有字母可显示
}
}
// print_r($options);die;
/* HTML代码 */
echo '<form action="" method="post">';
echo '<h3>请选择We的意思:</h3>';
foreach ($options as $k => $v) {
echo "<div><input type='radio' name='timu1' value='{$v['k']}'/> <b>{$v['letter']}</b>、{$v['xx']}</div>";
}
echo '</form>';
die();
/************** 示例 **************
// 目标格式:{"1":{"k":1,"xx":"You"},"2":{"k":2,"xx":"Me"} ... }
// DEMO1 => {1;{"k";1;"xx";"你";}2;{"k";2;"xx";"我";}3;{"k";3;"xx";"你们";}4;{"k";4;"xx";"我们";}}
// DEMO2 => {1:{"k";1;"xx";"你";}2:{"k";2;"xx";"我";}3:{"k";3;"xx";"你们";}4:{"k";4;"xx";"我们";}}
// DEMO3 => {1:{"k";1;"xx";"你"}2:{"k";2;"xx";"我"}3:{"k";3;"xx";"你们"}4:{"k";4;"xx";"我们"}}
// DEMO4 => {1:{"k":1;"xx":"你"}2:{"k":2;"xx":"我"}3:{"k":3;"xx":"你们"}4:{"k":4;"xx":"我们"}}
// DEMO5 => {1:{"k":1;"xx":"你"},2:{"k":2;"xx":"我"},3:{"k":3;"xx":"你们"},4:{"k":4;"xx":"我们"}}
// DEMO6 => {1:{"k":1,"xx":"你"},2:{"k":2,"xx":"我"},3:{"k":3,"xx":"你们"},4:{"k":4,"xx":"我们"}}
// DEMO7 => {"1":{"k":1,"xx":"你"},"2":{"k":2,"xx":"我"},"3":{"k":3,"xx":"你们"},"4":{"k":4,"xx":"我们"}}
// DEMO8 => 在最下面
*****************************/
/*****解析出来的数组DEMO8****
Array
(
[1] => Array
(
[k] => 1
[xx] => 你
)
[2] => Array
(
[k] => 2
[xx] => 我
)
[3] => Array
(
[k] => 3
[xx] => 你们
)
[4] => Array
(
[k] => 4
[xx] => 我们
)
)
******/
更多追问追答
追问
追答
测试了下,确实需要改进才能匹配出来,因为img标签的双引号。
<?php
function special_img_str_to_arr ($str) {
$return = array();
if (!is_string($str) || trim($str) == '') {
return $return;
}
/* 扔掉img标签,保留src值 */
$str = str_replace('http://', '', $str); // 支持含有http[s]
$str = str_replace('https://', '', $str);
$str = preg_replace('/<img\s*?src=[\'"]?(.*?)[\'"]\s*?\/?>/i', '$1', $str);
/* 格式化 */
$human_preg = '/([a-zA-Z\d]+):/i';
$human_str = preg_replace($human_preg, '', $str);
$human_str = str_replace(';{', ':{', $human_str);
$human_str = str_replace(';}', '}', $human_str);
$human_str = preg_replace('/";(["\d]+)/i', '":$1', $human_str);
$human_str = preg_replace('/\}(\d+)/i', '},$1', $human_str);
$human_str = str_replace(';"', ',"', $human_str);
$human_str = preg_replace('/([^\d])(\d+):/i', '$1"$2":', $human_str);
/* 转数组 */
$arr = json_decode($human_str, true);
if (is_array($arr) && count($arr)) {
$return = $arr;
}
return $return;
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询