将多维数组添加到另一个数组

时间:2014-01-30 15:51:09

标签: php arrays

根据W3Schools,这应该有效:

// A two-dimensional array:
$cars = array
  (
  array("Volvo",100,96),
  array("BMW",60,59),
  array("Toyota",110,100)
  );

那么下面的代码怎么没有:

$json = [];

foreach ($res as $product) {
    $slur = $product['slur'];

    $node = [
        'description' => $product['description'],
        'colors' => $product['color'],
        'region' => $product['region']
    ];

    var_dump($node); // Node has proper values

    $json[$slur] = $node; 
}

var_dump($json); // Keys are fine, $product['region'] works, colors and description don't

我的$ node var_dump:

array(3) { ["description"]=> string(128) "Ac risus eu amet rhoncus cursus, rhoncus in amet nascetur, diam, elementum porttitor penatibus nec cum dignissim proin et augue." ["colors"]=> string(67) "gun-blue, gun-green, gray-black, gun-orange, gun-lightblue, gun-red" ["region"]=> string(6) "europe" } array(3) { ["description"]=> string(128) "Ac risus eu amet rhoncus cursus, rhoncus in amet nascetur, diam, elementum porttitor penatibus nec cum dignissim proin et augue." ["colors"]=> string(67) "gun-blue, gun-green, gray-black, gun-orange, gun-lightblue, gun-red" ["region"]=> string(3) "usa" } array(3) { ["description"]=> string(128) "Ac risus eu amet rhoncus cursus, rhoncus in amet nascetur, diam, elementum porttitor penatibus nec cum dignissim proin et augue." ["colors"]=> string(19) "pink, green, purple" ["region"]=> string(6) "europe" } array(3) { ["description"]=> string(128) "Ac risus eu amet rhoncus cursus, rhoncus in amet nascetur, diam, elementum porttitor penatibus nec cum dignissim proin et augue." ["colors"]=> string(103) "black, red, silver, blue, green, gunmetal, brightgreen, gold, lightblue, darkblue, orange, pink, purple" ["region"]=> string(6) "europe" } array(3) { ["description"]=> string(128) "Ac risus eu amet rhoncus cursus, rhoncus in amet nascetur, diam, elementum porttitor penatibus nec cum dignissim proin et augue." ["colors"]=> string(67) "gun-blue, gun-green, gray-black, gun-orange, gun-lightblue, gun-red" ["region"]=> string(3) "usa" } array(3) { ["description"]=> string(128) "Ac risus eu amet rhoncus cursus, rhoncus in amet nascetur, diam, elementum porttitor penatibus nec cum dignissim proin et augue." ["colors"]=> string(67) "gun-blue, gun-green, gray-black, gun-orange, gun-lightblue, gun-red" ["region"]=> string(3) "usa" } array(3) { ["description"]=> string(128) "Ac risus eu amet rhoncus cursus, rhoncus in amet nascetur, diam, elementum porttitor penatibus nec cum dignissim proin et augue." ["colors"]=> string(67) "gun-blue, gun-green, gray-black, gun-orange, gun-lightblue, gun-red" ["region"]=> string(6) "europe" } array(3) { ["description"]=> string(128) "Ac risus eu amet rhoncus cursus, rhoncus in amet nascetur, diam, elementum porttitor penatibus nec cum dignissim proin et augue." ["colors"]=> string(67) "gun-blue, gun-green, gray-black, gun-orange, gun-lightblue, gun-red" ["region"]=> string(3) "usa" }

我的$ json var_dump:

array(5) { ["alignmee"]=> array(3) { ["description"]=> string(0) "" ["colors"]=>     string(0) "" ["region"]=> string(3) "usa" } ["xl"]=> array(3) { ["description"]=> string(0) "" ["colors"]=> string(0) "" ["region"]=> string(3) "usa" } ["hybrid"]=> array(3) { ["description"]=> string(0) "" ["colors"]=> string(0) "" ["region"]=> string(3) "usa" } ["classic"]=> array(3) { ["description"]=> string(0) "" ["colors"]=> string(0) "" ["region"]=> string(3) "usa" } ["original"]=> array(3) { ["description"]=> string(0) "" ["colors"]=> string(0) "" ["region"]=> string(6) "europe" } }

我无法理解我做错了什么。有人可以解释一下吗?

提前致谢!

2 个答案:

答案 0 :(得分:0)

查看输出后,很明显数据在while循环中被覆盖

所以试试这个

$json[$slur][] = $node;

而不是

$json[$slur] = $node;

如果您只想添加具有颜色和描述的节点,那么您可以在foreach循环中尝试以下操作

if(!empty($product['description']) && !empty($product['color']) ){
 $node = [
        'description' => $product['description'],
        'colors' => $product['color'],
        'region' => $product['region']
    ];

}

答案 1 :(得分:0)

您可以在PHP中使用json_encode()来实际构建JavaScript JSON字符串,方法是使用PHP数组并将其传递给它。

//Instigate the $json array, otherwise it'll throw a notice.
$json = array();
foreach ( $res as $product ) {
    $slur = $product['slur'];
    $node = [
        'description' => $product['description'],
        'colors' => $product['color'],
        'region' => $product['region']
    ];
    //We use the [] here to append to a new index
    //on each iteration of the loop; otherwise, it'll overwrite the last value
    $json[$slur][] = $node; 
}

echo json_encode( $json );

其次,可能同样重要!