2013-06-13 2 views
0

Может ли кто-нибудь сказать мне, как я могу преобразовать первый массив во второй массив, используя операции массива php.Array merge recursively php

Первый массив: -

Array 
(
    [0] => Array 
     (
      [actual_release_date] => 2013-06-07 00:00:00 
      [distributors] => 20th Century Fox/20th Century Fox Animation/Fox 2000 Pictures/Fox Searchlight 
     ) 

    [1] => Array 
     (
      [actual_release_date] => 2013-06-28 11:11:00 
      [distributors] => 20th Century Fox/20th Century Fox Animation/Fox 2000 Pictures/Fox Searchlight 
     ) 
) 

Второй массив: -

Array 
(
    [0] => Array 
     (
      [actual_release_date] => array(0=>2013-06-07 00:00:00 , 1=> 2013-06-28 11:11:00) 
      [distributors] => 20th Century Fox/20th Century Fox Animation/Fox 2000 Pictures/Fox Searchlight 
     ) 
) 

Если второй элемент является общим, а первый элемент отличается, то мы должны сгруппировать его в одном массиве.

Заранее спасибо.

+0

Пробовали ли вы старый добрый 'foreach' с' if' внутри? – Jon

+0

И если оба поля распространены? –

+0

@Jack только один будет в actual_release_date – Ajeesh

ответ

2

Вы можете использовать array_reduce

$data = array_reduce($data, function ($a, $b) { 
    if (isset($a[$b['distributors']])) { 
     $a[$b['distributors']]['actual_release_date'][] = $b['actual_release_date']; 
    } else { 
     $a[$b['distributors']]['actual_release_date'] = array($b['actual_release_date']); 
     $a[$b['distributors']]['distributors'] = $b['distributors']; 
    } 
    return $a; 
}, array()); 

print_r(array_values($data)); 

Выход

Array 
(
    [0] => Array 
     (
      [actual_release_date] => Array 
       (
        [0] => 2013-06-07 00:00:00 
        [1] => 2013-06-28 11:11:00 
       ) 

      [distributors] => 20th Century Fox/20th Century Fox Animation/Fox 2000 Pictures/Fox Searchlight 
     ) 

) 

See Live DEMO

+0

Спасибо, Баба, это сработало :) – Ajeesh

-1

Вы пытаетесь попробовать массив Мардж ..

<?php 
$array1 = array("color" => "red", 2, 4); 
$array2 = array("a", "b", "color" => "green", "shape" => "trapezoid", 4); 
//Maerge them 
$result = array_merge($array1, $array2); 
print_r($result); 
?> 

Приведенный выше пример выведет:

Array 
(
    [color] => green 
    [0] => 2 
    [1] => 4 
    [2] => a 
    [3] => b 
    [shape] => trapezoid 
    [4] => 4 
) 

Подробнее here

В документации сказано:

Если вы хочу добавить ar лучевые элементы из второго массива к первому массиву, а не перезаписывать элементы из первого массива и не переиндексации, используйте оператор + накидную массив:

<?php 
$array1 = array(0 => 'zero_a', 2 => 'two_a', 3 => 'three_a'); 
$array2 = array(1 => 'one_b', 3 => 'three_b', 4 => 'four_b'); 
$result = $array1 + $array2; 
var_dump($result); 
?> 

ключи от первого массив будет сохранен. Если в обоих массивах существует массив , то из первого массива будет использоваться , а элемент совпадающего ключа из второго массива будет проигнорирован.

array(5) { 
    [0]=> 
    string(6) "zero_a" 
    [2]=> 
    string(5) "two_a" 
    [3]=> 
    string(7) "three_a" 
    [1]=> 
    string(5) "one_b" 
    [4]=> 
    string(6) "four_b" 
}