Intereting Posts
TripleDES Шифрование на C # и PHP не выходит одинаково (PKCS7, ECB)? Как я могу написать SQL для таблицы с таким же именем, как защищенное ключевое слово в MySql? Как настроить трансформатор данных в Symfony для повторного использования существующих объектов? htaccess переписать URL php параметры Как кэшировать динамическую страницу PHP Простая форма, не отправляющая данные через _POST Извлечение файла в PHP и отображение содержимого в диаграмме Как определить, нужно ли применять utf8 декодировать или кодировать строку? SSL-сертификат партнера или SSH-ключ не был в порядке Убедитесь, что UNIQUE-строка уже существует с помощью findBy в ManyToMany, любом обходном решении или рабочем решении? Не удается закрыть соединения ODBC Как построить дерево / вложенный массив «дочерний родительский элемент» из базы данных? Как получить значение проверенного переключателя и остальных td, но не включать переключатель, который не был проверен (в tr) Уменьшить символ с помощью php Можно ли использовать array_push в массиве SESSION в php?

Массивы слияния PHP по значению

Я знаю, что это довольно легко выполнить с помощью foreach , затем while -> list и т. Д. (Я уже это сделал), однако я чувствую, что мой код немного грязный, и это не похоже на лучшее решение. .. Я ищу, чтобы использовать собственные функции массива PHP, чтобы сделать следующее:

У меня есть два массива, которые выглядят так:

 [0] (массив) # 2
   [ранг] "579"
   [id] "1"
 [1] (массив) # 4
   [rank] "251"
   [id] "2"

 [0] (массив) # 2
   [размер] "S"
   [status] "A"
   [id] "1"
 [1] (массив) # 15
   [размер] "L"
   [status] "A"
   [id] "2"

И мне нужно в результате что-то вроде следующего:

 [0] (массив) # 2
   [размер] "S"
   [status] "A"
   [id] "1"
   [ранг] "579"

 [1] (массив) # 2
   [размер] "L"
   [status] "A"
   [id] "2"
   [rank] "251"

Есть ли способ объединить два массива с id значением (или другим), не вдаваясь в бесконечный набор foreach s?

Использовать array_merge_recursive ()

 $array = array_merge_recursive($array1, $array2); 

или сделать свою собственную функцию (она может быть быстрее)

 function my_array_merge(&$array1, &$array2) { $result = Array(); foreach($array1 as $key => &$value) { $result[$key] = array_merge($value, $array2[$key]); } return $result; } $array = my_array_merge($array1, array2); print_r($array); 

ok, давайте предположим, что ваши массивы называются $ arr1 и $ arr2, вы можете сделать это:

 <?php $newarray = Array(); foreach ($arr1 as $element=>$value){ $newarray = array_merge($arr1[$element],$arr2[$element]) } ?> 

Как заметил Рэй в комментарии, принятый ответ на самом деле не отвечает на вопрос. Мне не удалось найти ответ, поэтому я создал следующую небольшую служебную функцию:

 function array_merge_callback($array1, $array2, $predicate) { $result = array(); foreach ($array1 as $item1) { foreach ($array2 as $item2) { if ($predicate($item1, $item2)) { $result[] = array_merge($item1, $item2); } } } return $result; } 

Используйте его следующим образом:

 array_merge_callback($array1, $array2, function ($item1, $item2) { return $item1['id'] == $item2['id']; }); 

Имейте хороший способ слить массивы, как другие языки. Это связано с тем, что php имеет элементы массива с нумерацией, а слияние будет дублировать или заменять разные элементы ключами.

Теперь это изменилось.

 // array_fork public static function array_fork() { $args = func_get_args(); $result = array(); foreach ($args as $arr) { is_array($arr) || exit('[' . __METHOD__ . '] Each item must be an array.'); foreach ($arr as $key => $val) { if (is_array($val)) { // recursion !isset($result[$key]) && $result[$key] = array(); $result[$key] = self::array_fork($result[$key], $arr[$key]); continue; } if (is_numeric($key)) { if (!in_array($arr[$key], $result)) $result[] = $arr[$key]; } else $result[$key] = $arr[$key]; } } return $result; } 
 function custom_array_merge(&$array1, &$array2) { $result = Array(); foreach ($array1 as $key_1 => &$value_1) { // if($value['name']) foreach ($array2 as $key_1 => $value_2) { if($value_1['name'] == $value_2['name']) { $result[] = array_merge($value_1,$value_2); } } } return $result; } 

// Передаем $ array1, & $ array2 и изменяем имя $ value_2 ['name'] //, на основе которого вы хотите объединиться.