Intereting Posts

PHP array_merge с числовыми ключами

Как это сделать, поэтому array_merge () перезаписывает два ключа с разными значениями, но тот же ключевой индекс из двух массивов?

например, слияние:

[0] => 'whatever'

с

[0] => 'whatever', [1] => 'a', [2] => 'b'

должен производить

[0] => 'whatever', [1] => 'a', [2] => 'b'

В основном я хочу, чтобы array_merge baave так же, как он ведет себя, если массивы имеют строковые ключи …

Используйте оператор + .

Сравните оператор array_merge с + :

 <?php $a1 = array(0=>"whatever",); $a2 = array(0=>"whatever",1=>"a",2=>"b"); print_r(array_merge($a1,$a2)); print_r($a1+$a2); ?> 

Вывод:

 Array ( [0] => whatever [1] => whatever [2] => a [3] => b ) Array ( [0] => whatever [1] => a [2] => b ) 

Оператор + прежнему работает, если ваш ассоциативный массив имеет числовые ключи вне порядка:

 <?php $a1 = array(0=>"whatever",); $a2 = array(1=>"a",0=>"whatever",2=>"b"); print_r(array_merge($a1,$a2)); print_r($a1+$a2); ?> 

Вывод:

 Array ( [0] => whatever [1] => a [2] => whatever [3] => b ) Array ( [0] => whatever [1] => a [2] => b ) 

Обратите внимание, что array_merge в этом случае создает новый ключ. Нежелательно …

Довольно легко писать вручную:

 function array_merge_custom($first, $second) { $result = array(); foreach($first as $key => $value) { $result[$key] = $value; } foreach($second as $key => $value) { $result[$key] = $value; } return $result; } 

Обновление: это ведет себя иначе, чем оператор объединения ( return $first + $second; ), потому что в этом случае второй массив выигрывает, когда у обоих есть элементы с одним и тем же ключом.

Однако, если вы переключите места аргументов и поместите массив, который вы хотите «выиграть» в случае конфликтов в качестве первого операнда, вы можете получить такое же поведение. Таким образом, вышеприведенная функция ведет себя точно так же, как return $second + $first; ,

 function array_merge_custom() { $array = array(); $arguments = func_num_args(); foreach($arguments as $args) foreach($args as $key => $value) $array[$key] = $value; return $array; } 

Вы должны использовать $a2+$a1 чтобы получить тот же результат с array_merge($a1,$a2);

 $a1 = array( 'k1' => 1, 'k2' => 2, 'k3' => 3, ); $a2 = array( 'k1' => 11, 'k2' => 22, 'k4' => 44, ); 

Код:

 print_r(array_merge($a1,$a2)); 

Вывод:

 Array ( [k1] => 11 [k2] => 22 [k3] => 3 [k4] => 44 ) 

Код:

 print_r($a1+$a2); 

Вывод:

 Array ( [k1] => 1 [k2] => 2 [k3] => 3 [k4] => 44 ) 

Код:

 print_r($a2+$a1); 

Вывод:

 Array ( [k1] => 11 [k2] => 22 [k4] => 44 [k3] => 3 ) 

array_replace делает именно это. См. http://php.net/manual/de/function.array-replace.php

Вы можете использовать array_merge() а затем использовать array_unique() .

 the solution could be this: function array_merge_custom($array1, $array2) { $mergeArray = []; $array1Keys = array_keys($array1); $array2Keys = array_keys($array2); $keys = array_merge($array1Keys, $array2Keys); foreach ($keys as $key) { $mergeArray[$key] = array_merge_recursive(isset($array1[$key]) ? $array1[$key] : [], isset($array2[$key]) ? $array2[$key] : []); } return $mergeArray; } $array1 = [ '66_' => [ 'k1' => 1, 'k2' => 1, ], '67_' => [ 'k1' => 1, 'k2' => 1, ], '68_' => [ 'k1' => 1, 'k2' => 1, ], 68 => [ 'k1' => 1, 'k2' => 1, ] ]; $array2 = [ '66_' => [ 'a1' => 1, 'a2' => 1, ], '68_' => [ 'b1' => 1, 'b2' => 1, ], 68 => [ 'b1' => 1, 'b2' => 1, ] ]; echo '<pre>'; print_r(array_merge_custom($array1, $array2)); 
 $arrA = [10, 11, 12]; $arrB = [12, 13]; $arrCommon = array_keys(array_flip($arrA) + array_flip($arrB)); print_r($arrCommon); Array ( [0] => 10 [1] => 11 [2] => 12 [3] => 13 ) 

Сравните с НЕПРАВИЛЬНЫМ использованием "+"

 $arrCommon = $arrA + $arrB; print_r($arrCommon); Array ( [0] => 10 [1] => 11 [2] => 12 )