Я попытался объединить два разных массива в один массив. Кто-нибудь может мне помочь?
У меня массив вроде этого
[0] (Array)#2 [rank] "579" [id] "1" [1] (Array)#4 [rank] "251" [id] "2" [0] (Array)#2 [size] "S" [rank] "251" [1] (Array)#15 [size] "L" [rank] "579"
мне это нравится
[0] (Array)#2 [size] "S" [rank] "251" [id] "1" [1] (Array)#15 [size] "L" [rank] "579" [id] "1"
Непроверенный, но это должно сработать или, по крайней мере, приблизиться к вам.
for ($array1 as $key1 => $value1) { for ($array2 as $key2 => $value2) { if ($value1['rank'] == $value2['rank']) { $result[$key1] = [$value2['size'], $value1['rank'], $value1['id']]; }; }; };
foreach($arr1 as $key1 => $data1){ foreach($arr2 as $key2 => $data2){ if($data1['rank']==$data2['rank']){ $result[] = array_merge($data1, $data2); } } } print_r($result);
//save keys of ranks in the 1st array $keys = array(); foreach($arr1 as $k => $v) $keys[$v['rank']] = $k; $res = array(); // Walk through the 2nd array and make result foreach($arr2 as $k => $v) if (isset($keys[$v['rank']])) $res[] = array_merge($arr1[$keys[$v['rank']]], $v); print_r($res);
Глядя на ваши предоставленные массивы, я предполагаю, что вы хотите использовать ключевой ранг как точку соединения (что не кажется такой хорошей идеей, и вопрос будет, если они уникальны или нет), если они уникальны, то крошечный метод может помочь получить элемент, основанный на их ранжировании, а остальное просто собирает результат:
<?php $arr1 = [ [ 'rank' => 579, 'id' => 1 ], [ 'rank' => 251, 'id' => 2 ], ]; $arr2 = [ [ 'size' => 'S', 'rank' => 251 ], [ 'size' => 'L', 'rank' => 579 ], ]; function getItemByRank($array, $rank) { foreach ($array as $item){ if ($item['rank'] === $rank) { return $item; } } } $result = []; foreach ($arr1 as $k => $item) { $match = getItemByRank($arr2, $item['rank']); if (isset($match)) { $result[$k] = $item; $result[$k]['size'] = $match['size']; } } print_r($result);
вывод:
Array ( [0] => Array ( [rank] => 579 [id] => 1 [size] => L ) [1] => Array ( [rank] => 251 [id] => 2 [size] => S ) )
Хотя я не понимаю, почему вы хотите объединить массивы таким образом, вот способ объединить массивы по их последовательностям. поэтому первый дочерний элемент массива 1 будет объединен с первым потомком array2 и т. д.
<?php $array1 = [ [ 'rank' => 579, 'id' => 1 ], [ 'rank' => 251, 'id' => 2 ] ]; $array2 = [ [ 'size' => 'S', 'rank' => 251 ], [ 'size' => 'L', 'rank' => 579 ] ]; foreach ($array1 as $key => &$data) { if (isset($array2[$key])) { $data = array_merge($data, $array2[$key]); } } var_dump($array1);