2014-01-30 4 views
2

Согласно W3Schools, это должно работать:Добавление многомерного массива в другой массив

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

Тогда как наступит следующий код Doesnt:

$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 

Мой $ узел 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" } 

My $ 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" } } 

Я не могу понять, что я делаю неправильно. Может кто-нибудь объяснить?

Заранее благодарен!

+0

Что такое '$ res'? –

+0

Это отлично работает для меня, когда я создаю массив фиктивных '$ res' с соответствующими ключами. Так как @ sebcap26 сказал, что такое '$ res'? – elitechief21

+0

$ res - это список продуктов. $ product ['description'] также возвращает правильные значения. –

ответ

0

Вы должны использовать json_encode() в PHP, чтобы фактически построить JSON-строку JavaScript, взяв массив 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); 

Во-вторых, возможно, в равной степени важно!

+0

Спасибо большое! Это работает! –

+0

@ R.vanderPeijl Нет проблем! Если вам нужно какое-либо разъяснение ни о чем, дайте мне знать =)! – MackieeE

+0

Как добавление [] решает проблему, когда $ slur уже должен быть другим значением на каждой итерации? И почему это (даже если оно добавит новый элемент массива) поможет заполнить описание и регион? – ToBe

0

Посмотрев на выходе становится ясно, что данные были перезаписаны в цикле в то время как

Так что попробуйте это

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

вместо

$json[$slur] = $node; 

если вы хотите добавить только тот узел, у которого есть цвет и описание, вы можете попробовать следующее в вашем цикле foreach

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

} 
+0

Не работает, var_dump ($ json) все еще показывает мне пустые значения :( –

+0

вы можете добавить свой выход var_dump –

+0

@ R.vanderPeijl - раздел комментариев не идеален для больших блоков кода. Вместо этого добавьте его к своему вопросу , а затем удалите комментарий. Таким образом, он станет более заметным для других (и вы можете применить форматирование) – Leigh

Смежные вопросы