2015-05-07 2 views
-1

Рассмотрим три ассоциативные массивы в PHP:PHP: Как объединить несколько ассоциативных массивов в многомерный массив?

$a1 = array(
"a" => "1", 
"b" => "2", 
"c" => "3" 
); 

$a2 = array(
"d" => "4", 
"e" => "5", 
"f" => "6" 
); 

$a3 = array(
"g" => "7", 
"h" => "8", 
"i" => "9" 
); 

Как бы эффективно комбинировать их в многомерный массив следующим образом:

$result = array(
"1" => array("4","7"), 
"2" => array("5","8"), 
"3" => array("6","9") 
); 

Спасибо заранее!

+2

Вы попробовали что-то для достижения своей цели? – Rizier123

+0

Каковы правила? Является ли $ a1 предоставлением ключей и $ a2/$ a3 значений? –

+0

Вы имели в виду '" 1 "=> массив (" 1 "," 4 "," 7 "),'? – castis

ответ

1

Очень похоже на пару вопросов я ответил вчера вечером:

$a1 = array(
"a" => "1", 
"b" => "2", 
"c" => "3" 
); 

$a2 = array(
"d" => "4", 
"e" => "5", 
"f" => "6" 
); 

$a3 = array(
"g" => "7", 
"h" => "8", 
"i" => "9" 
); 

$x = array_combine(
    $a1, 
    call_user_func_array('array_map', [null, $a2, $a3]) 
); 
var_dump($x); 
+0

Ну, я подготовил тот же ответ, просто с объяснением, что делает код, и теперь я ждал, пока OP покажет некоторые усилия и некоторую работу! Но теперь ОП получил свою конфету! – Rizier123

+0

Отлично! Жаль, что я не смог бы вручить это вам сейчас! Сначала сбой на моем сервере из-за старой установки php. После того, как я принял ответ, я исправил его для вызова_user_func_array ('array_map', array (null, $ a2, $ a3)), и теперь он отлично работает. Это короче, чем я принял. – Stack

+0

@MarkBaker http://stackoverflow.com/q/30131528 Вы видите больше, меньше или равных усилий в новом вопросе OP (по сравнению с этим)? Кроме того, поскольку он поставил этот вопрос в этом качестве, он, вероятно, предполагает, что он получит свой код с этими усилиями. И именно такое поведение происходит от ответов на такие вопросы! (без усилий) – Rizier123

1

довольно прямо вперед:

foreach($a1 as $val) { 
    $result[$val] = array(array_shift($a2), array_shift($a3)); 
} 
+0

Это работает: меньше. – Stack

0

Это то, что вы имеете в виду?

<?php 

$a1 = array(
    "a" => "1", 
    "b" => "2", 
    "c" => "3" 
); 

$a2 = array(
    "d" => "4", 
    "e" => "5", 
    "f" => "6" 
); 

$a3 = array(
    "g" => "7", 
    "h" => "8", 
    "i" => "9" 
); 

$a1_ = array_values($a1); 
$a2_ = array_values($a2); 
$a3_ = array_values($a3); 

$newarray = array(); 
$max = count($a1_); 
for($i = 0; $i < $max; $i++) { 
    $newarray[$a1_[$i]] = array($a2_[$i], $a3_[$i]); 
} 

var_dump($newarray); 

, который выводит

array(3) { 
    [1]=> 
    array(2) { 
    [0]=> 
    string(1) "4" 
    [1]=> 
    string(1) "7" 
    } 
    [2]=> 
    array(2) { 
    [0]=> 
    string(1) "5" 
    [1]=> 
    string(1) "8" 
    } 
    [3]=> 
    array(2) { 
    [0]=> 
    string(1) "6" 
    [1]=> 
    string(1) "9" 
    } 
} 
+0

Работает, но мне приходится иметь дело с 30-50 массивами - нужно объявить $ a1_ = array_values ​​($ a1); $ a2_ = array_values ​​($ a2); $ a3_ = array_values ​​($ a3); похоже, перетащить. – Stack

0

Прежде объединить все массивы в единый многомерный массив.

$arrays = array(); 
array_push($arrays,$a1) //Do the same for the rest 

Создайте еще один массив и пройдите через тот, который мы только что создали.

$result = array(); 
foreach($arrays as $a) { 
    $result[$a[0]] = array_shift($a); 
} 

Это вытаскивает первое значение из массива и делает его ключом. Затем он использует array_shift, чтобы вытащить первый элемент массива, чтобы он не был включен в назначение.

Действительно ли это похоже на то, что вы ищете?

Примечание: Это масштабируемо для любого размера массива и любого количества массивов. Просто добавьте любой массив, который вы хотите включить в $ array, используя array_push, и он будет следовать шаблону, описанному выше.

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