Я знаю, что есть тонна ответов, но я не могу понять. У меня есть следующие массивы и то, что я пробовал:
$a = array ( 0 => '1421' , 1 => '2241' ); $b = array ( 0 => 'teststring1' , 1 => 'teststring2' ); $c = array ( 0 => 'teststring3' , 1 => 'teststring4' ); $d = array ( 0 => 'teststring5' , 1 => 'teststring6' ); $e = array_combine($a, array($b,$c,$d) );
Но с этим я получаю ошибку array_combine() [function.array-combine]: Both parameters should have an equal number of elements
.
Я знаю, это потому, что значения массива $a
не являются ключами. Вот почему я прихожу сюда, чтобы узнать, смогу ли я получить какую-то помощь с ответом, который может помочь мне сделать это примерно так:
array(2) { [1421]=>array( [0] => teststring1 [1] => teststring3 [2] => teststring5 ) [2241]=>array( [0] => teststring2 [1] => teststring4 [2] => teststring6 ) }
Если у вас есть контроль над созданием массивов, вы должны создать их так:
$a = array ('1421' ,'2241'); $b = array ('teststring1', 'teststring3', 'teststring5'); $c = array ('teststring2', 'teststring4', 'teststring6'); $e = array_combine($a, array($b,$c) );
Если нет, вам нужно перевернуть их:
$result = array(); $values = array($b, $c, $d); foreach($a as $index => $key) { $t = array(); foreach($values as $value) { $t[] = $value[$index]; } $result[$key] = $t; }
DEMO
Вот новая версия array_merge_recursive, которая будет обрабатывать целые ключи. Дайте знать, как это происходит.
$a = array ( 0 => '1421' , 1 => '2241' ); $b = array ( 0 => 'teststring1' , 1 => 'teststring2' ); $c = array ( 0 => 'teststring3' , 1 => 'teststring4' ); $d = array ( 0 => 'teststring5' , 1 => 'teststring6' ); $e = array_combine($a, array_merge_recursive2($b, $c, $d)); echo "<pre>"; print_r($e); function array_merge_recursive2() { $args = func_get_args(); $ret = array(); foreach ($args as $arr) { if(is_array($arr)) { foreach ($arr as $key => $val) { $ret[$key][] = $val; } } } return $ret; }