2015-05-08 2 views
2

Как удалить повторяющиеся значения из многомерного массива в PHP?PHP- Удалить дублирующее значение из многомерного массива

Пример массива:

Array 
(
    [choice] => Array 
     (
      [0] => Array 
       (
        [day] => Monday 
        [value] => Array 
         (
          [0] => Array 
           (
            [name] => BI 
            [time] => 10:00 
            [location] => B123 
           ) 
          [1] => Array 
           (
            [name] => BI 
            [time] => 11:00 
            [location] => A123 
           ) 
         ) 
       ) 

      [1] => Array 
       (
        [day] => Tuesday 
        [value] => Array 
         (
          [0] => Array 
           (
            [name] => BI 
            [time] => 10:00 
            [location] => B123 
           ) 
          [1] => Array 
           (
            [name] => BI 
            [time] => 11:00 
            [location] => A123 
           ) 
         ) 
        ) 
     ) 
) 

Я хотел бы, чтобы удалить те, с повторяющимися name. Поэтому я хочу, чтобы каждый день оставался один предмет.

мой код до сих пор:

$taken = array(); 
foreach($subject_list['choice'][0]["value"] as $key =>$item) 
{ 
    if(!in_array($item['name'], $taken)) 
    { 
     $taken[] = $item['name']; 
    }else 
    { 
     unset($flight_list['choice'][0]["value"][$key]); 
    } 

} 

OUTPUT выше код (который, очевидно, неправильно):

Array 
(
    [choice] => Array 
     (
      [0] => Array 
       (
        [day] => Monday 
        [value] => Array 
         (
          [0] => Array 
           (
            [name] => BI 
            [time] => 10:00 
            [location] => B123 
           ) 
         ) 
       ) 

      [1] => Array 
       (
        [day] => Tuesday 
        [value] => Array 
         (
          [0] => Array 
           (
            [name] => BI 
            [time] => 10:00 
            [location] => B123 
           ) 
          [1] => Array 
           (
            [name] => BI 
            [time] => 11:00 
            [location] => A123 
           ) 
         ) 
        ) 
     ) 
) 

Любой человек может помочь мне, как я могу удалить тот же класс name на Tuesday.

ответ

3

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

foreach($subject_list['choice'] as &$items) { 
    $temp = array(); // temporary container for current iteration 
    foreach($items['value'] as $value) { 
     if(!isset($temp[$value['name']])) { // if its new 
      $temp[$value['name']] = $value; // push the batch using the key name 
     } 
    } 
    $items['value'] = $temp; // apply unique value in the end of this batch 
} 

Sample Output

0

где $array является переменной PHP, где ваш массив приходит

$array = array_map("unserialize", array_unique(array_map("serialize", $array))); 
-2

Просто быстро Google, чтобы удалить дубликаты из многомерного массива:

<?php 
function super_unique($array) 
{ 
    $result = array_map("unserialize", array_unique(array_map("serialize", $array))); 

    foreach ($result as $key => $value) 
    { 
    if (is_array($value)) 
    { 
     $result[$key] = super_unique($value); 
    } 
    } 

    return $result; 
} 
?> 
Смежные вопросы