Остерегайтесь дубликатов ключей - как решить эту проблему? - PullRequest
1 голос
/ 03 января 2012

После того, как я попросил метод объединения 2 массивов, я получил несколько ответов, которые вы можете найти здесь:

Объединение массивов в ассоциативный массив

I 'Мы реализовали принятый ответ, но, как предупредил автор, я столкнулся с проблемой «дубликатов ключей».

Вот код, который я использую:

$a = array(4=>3,5=>3);
$b = array(array(0=>0,1=>4,2=>10,3=>1000),
           array(0=>0,1=>40,2=>100,3=>2000),
           array(4=>10)
          );

$c = array();
foreach($b as $tmp) {
    $c[] = $a+$tmp;
}

var_dump($c);

Но этовозвращает массив, подобный этому:

Array (
    [0] => Array (
        [3] => 1 
        [5] => 1 
        [6] => 0 
        [7] => 0 
        [8] => 0
        )
    [1] => Array (
        [3] => 1 
        [5] => 1 
        [6] => 0 
        [7] => 0 
        [8] => 0
        ) 
    [2] => Array (
        [3] => 1 
        [5] => 1 
        [6] => 1 
        [7] => 0 
        [8] => 0
        )
    [3] => Array ( 
        [3] => 1 
        [5] => 1 
        [6] => 1 
        [7] => 0 
        [8] => 0
        )
    [4] =>...

Как видите, ключ 0 совпадает с ключом 1 .. и т. д.

Как мне решить эту проблему?

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

Ответы [ 2 ]

2 голосов
/ 03 января 2012

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

$unique = array();
foreach ($c as $arr) {
  if ( ! in_array($arr, $unique)) {
    $unique[] = $arr;
  }
}

var_dump($unique);

Это создает уникальный массив путем итерации по исходному массиву и добавления новых элементов при их обнаружении.

1 голос
/ 03 января 2012

Если вам не нужна поддержка старых ключей массива, вы можете использовать функцию array_merge .

<?php
$array1 = array("color" => "red", 2, 4);
$array2 = array("a", "b", "color" => "green", "shape" => "trapezoid", 4);
$result = array_merge($array1, $array2);
print_r($result);
?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...