2016-08-25 5 views
1

У меня есть массив как это:PHP Поиск многомерный массив для повторяющихся значений

[0] => Array 
    (
     [0] => Array 
      (
       [Foo] => Bar 
       [Foo2] => String1 
      ) 

    ) 

[1] => Array 
    (
     [0] => Array 
      (
       [Foo] => Bar 
       [Foo2] => String2 
      ) 

    ) 

В то время как один я работаю намного больше, это общая форма этого. Я пытаюсь посмотреть на каждое значение относительно Foo, и если в одном из массивов есть повторение, возьмите последующее значение Foo2 и «нажмите» его в новый массив, по существу выглядящий следующим образом:

[0] => Array 
    (
    [0] => Array 
     (
      [Foo] => Bar 
       [Foo2] => String1, 
          String2 
     ) 

) 

В принципе, я просто хочу знать, возможно ли это!

+3

Да, это возможно. –

+0

результирующий массив, который вы выставили, невозможно - ассоциативные массивы не могут иметь одинаковые ключи – RomanPerekhrest

+0

Я его отредактировал, это то, что я имел в виду, - – codnor

ответ

1

Решение с использованием isset и array_values функции:

$grouped = []; 
foreach ($arr as $v) { // $arr is your initial array 
    $foo = $v[0]['Foo']; 
    if (!isset($grouped[$foo])) { 
     $grouped[$foo] = $v[0]; 
    } else { 
     $grouped[$foo]['Foo2'] .= "," . $v[0]['Foo2']; 
    } 
} 
$result = array_values($grouped); 
print_r($result); 

DEMO link

0

Возможность заключается в использовании для цикла внутри цикла в то время:

Go через входной массив с некоторым временем (а длина входного массива> 0)

Скопируй первый массив с Foo и foo2 в (первоначально пустой) выходной массив

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

а) Скопируйте значение foo2 и добавьте его к выходу массив в Foo2 (последний массив в выходном массиве).

б) отключенный массив с дубликатом экземпляром Foo из входного массива (поскольку теперь в выходном массиве)

Затем незаданы первый массив в пределах входного массива (так как все экземпляры теперь в выходной массив) и break.

В конце входной массив будет пустым, а выходной массив будет отсортирован согласно вашему запросу.

+0

Извините за отсутствие примера кода, мой телефон не сотрудничает – Wilco

Смежные вопросы