php 大神看看一个数组问题

        [['7','2'],['8','2'],['11','2'],['10','2'],['9','2']]

数据库存的是这样的数据 ['7','2'] 7代表产品id 2代表产品购买的数量

现在怎么 还原成 php 能使用的数组尼?

阅读 5.5k
11 个回答

属于偷鸡取巧的方法:当然,前提是你的数据都是完整的,不会有负数,NULL什么的

$a = "[['7','2'],['8','2'],['11','2'],['10','2'],['9','2']]";
$result = array();
preg_match_all("/'(\d*)'/", $a, $matches);
for ($i = 0; $i < count($matches[1]); $i += 2){
   $result[(int)$matches[1][$i]] = (int) $matches[1][$i+1];
}

亲测成功

标准json需要双引号, 所以只要把单引号转成双引号, 再json_decode

$sqldata = "[['7','2'],['8','2'],['11','2'],['10','2'],['9','2']]";
$sqldata = str_replace('\'', '\"', $sqldata );
$data = json_decode($sqldata);
echo $data[0][1]; // >> 2
$str = "[['7','2'],['8','2'],['11','2'],['10','2'],['9','2']]";
var_dump(eval('return '.$str.';'));

试试

你没说具体格式,我就先采用下面这种格式了

$data = [['7','2'],['8','2'],['11','2'],['10','2'],['9','2']];
$products = array();
foreach ($data as $tmp) {
    $products[] = array(
        'id' => $tmp[0],
        'total' => $tmp[1]
    );
}
var_dump($products);

谢邀!

你这个就是数组,你直接循环好了:

    $arr     = [['7','2'],['8','2'],['11','2'],['11','2'],['11','2']];
    var_dump($arr[0]);die;
    

这个数组等同于:

    $arr     = array(
                    array('7','2'),
                    array('8','2'),
                    array('11','2'),
                    array('11','2'),
                    array('11','2'),
                );
     var_dump($arr[0]);die;

你这么存进去的,再反解回来不就结了么。

$str = json_encode(array(
    array(7, 2),
    array(8, 2),
));

var_dump(json_decode($str));

$a = "[['7','2'],['8','2'],['11','2'],['10','2'],['9','2']]";
// 如果数据格式是以上类型的话,直接去掉单引号,然后json_decode就可以了
$b = str_replace("'",'',$a);
$c = json_decode($b);

建议还是把存入库里的数组改成 json 格式的,我如果在库里看到有人这么写数组绝对喷他

这个存进去就是数组嘛 用eval()解成数组就好了
还是建议存json

[['7','2'],['8','2'],['11','2'],['10','2'],['9','2']] 这个本身就是数组;
从数据库取出来的时候是字符串,可以这样处理下:

$str = '$arr='."[['7','2'],['8','2'],['11','2'],['10','2'],['9','2']];"
eval($str);

var_dump($arr); //得到的$arr就是array

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题