json_encode数组

时间:2016-03-10 12:27:13

标签: php mysql json

我正在从mysql中重新获取数据。在我的PHP我有2个数组设置

 $main =array(); //tostore retrived data
 $list =array('instock' => 'output1', 'item' => 'output2'); //existing key values and new key value to be replaced

如何使用每个输出的自定义键替换键? exmpale:自定义键output1output2

当前输出

[{"instock":"yes", "item":"ch00024"},{..}]

预期输出

[{"output1":"yes", "output2":"ch00024"},{..}]

这是我到目前为止所尝试的。但是不起作用。

     $main =array(); //tostore retrived data
     $list =array('instock' => 'output1', 'item' => 'output2'); //replace key values

     foreach ($result as $key => $value){ 
        $main[  $list[ $key ] ] = $value; 
     }
     echo json_encode( $main );

我收到错误Undefined offset: 0。它指向此行$main[ $list[ $key ] ] = $value;

修改

这是我的控制台的屏幕截图

enter image description here

的var_dump():

array(5) {
  [0]=>
  array(2) {
    ["instock"]=>
    string(3) "yes"
    ["item"]=>
    string(6) "it0215"
  }
  [1]=>
  array(2) {
    ["instock"]=>
    string(3) "yes"
    ["item"]=>
    string(6) "it0381"
  }
  so on...

2 个答案:

答案 0 :(得分:1)

尝试此代码

$ flippedList = array_flip($ list);

答案 1 :(得分:1)

您的代码有效!问题出在$list数组中,您需要在$result中定义所有键,否则您需要检查$list数组中是否存在该键。

$result =array(
    'instock' => 'yes',
    'item'    => 'ch00024',
    'color'   => 'blue',
    'price'   => 100
);

$main = array();

$list = array('instock' => 'output1', 'item' => 'output2');

foreach ($result as $key => $value){ 
    if (!empty($list[$key])) {
        $main[$list[$key]] = $value; 
    }
}
echo json_encode($main);

修改

因为你是访问二维数组,所以你需要一个额外的循环来遍历所有项目

$result = array(
     array (
        'instock' => 'yes',
        'item' => 'it0215'
     ),
     array(
        'instock' => 'yes',
        'item' => 'it0381'
     )
);

$main = array();

$list = array('instock' => 'output1', 'item' => 'output2');

foreach ($result as $item){ 
    foreach ($item as $key => $value) {
        $main[$list[$key]] = $value; 
    }
}

echo json_encode($main);

输出

{"output1":"yes","output2":"it0381"}

但是如果你想在新数组中获得所有带密钥替换的项目。你应该这样做:

foreach ($result as $index => $item){ 
    foreach ($item as $key => $value) {
        $main[$index][$list[$key]] = $value; 
    }
}

echo json_encode($main);

输出结果为:

[
  {"output1":"yes","output2":"it0215"},             
  {"output1":"yes","output2":"it0381"}
]