2013-02-10 7 views
1

У меня есть многомерный PHP массив глядя, как это в JSON:Поиск дубликатов в многомерном массиве PHP

array = [{ 
      "id":"1", 
      "key":"Ferrari", 
      "type":"car"}, 
     { 
      "id":"1", 
      "key":"Red", 
      "type":"color"}, 
     { 
      "id":"73", 
      "key":"Yellow", 
      "type":"color" 
     }] 

Потому что это на самом деле результат поиска, я хотел бы, динамически объединить результаты, где идентификаторы являются одна и та же. Другими словами, новый массив должен выглядеть следующим образом:

array = [{ 
      "id":"1", 
      "key":"Red Ferrari", 
      "type":"keyword"}, 
     { 
      "id":"73", 
      "key":"Yellow", 
      "type":"color" 
     }] 

Я смотрел на много функций PHP, но они имеют ограниченные функциональные возможности, в многомерных массивах. Любые предложения приветствуются :)

Многие Привет
Andreas

+1

Соответствует ли совпадение «type: keyword»? Как сочетаются имена? Откуда вы знаете, что это * Red Ferrari *, а не * Ferrari red *? – insertusernamehere

ответ

0

Там нет базовых функций, чтобы сделать как конкретные вещи, как вы говорите. Таким образом, вы можете сделать что-то вроде этого:

print_r(my_array_merge($data)); 
function my_array_merge($data) 
{ 
    // sort all records by id to merge them later 
    $data_by_id = array(); 
    foreach ($data as $item) 
    { 
     if (!isset($data_by_id[ $item['id'] ])) { 
      $data_by_id[ $item['id'] ] = array(); 
     } 
     $data_by_id[ $item['id'] ][] = $item; 
    } 
    // merge records with same id 
    $return = array(); 
    foreach ($data_by_id as $id => $items) 
    { 
     foreach ($items as $item) 
     { 
      if (!isset($return[ $id ])) { 
       $return[ $id ] = $item; 
      } else { 
       $return[ $id ]['key'] .= ' ' . $item['key']; 
       $return[ $id ]['type'] = 'keyword'; // I don't really get what you mean by 'keyword' 
      } 
     } 
    } 
    // reset keys before return 
    return array_values($return); 
} 
+0

хорошо «ключевое слово» было просто символизировать, что это уже не категорическая категория, как «автомобиль» или «цвет», но это делает именно то, что мне нужно thx :) –

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