2015-04-29 3 views
0

У меня есть массив как это:массива удалить тот же PHP

Array 
(
    [0] => Array 
     (
      [fileid] => 7 
      [remarks] => 
      [filename] => whomovedmycheese - Copy.pdf 
      [type] => application/pdf 
      [size] => 500624 
     ) 

    [1] => Array 
     (
      [fileid] => 7 
      [remarks] => 
      [filename] => whomovedmycheese.pdf 
      [type] => application/pdf 
      [size] => 500624 
     ) 

    [2] => Array 
     (
      [fileid] => 8 
      [remarks] => 
      [filename] => whomovedmycheese - Copy.pdf 
      [type] => application/pdf 
      [size] => 500624 
     ) 

    [3] => Array 
     (
      [fileid] => 8 
      [remarks] => 
      [filename] => whomovedmycheese.pdf 
      [type] => application/pdf 
      [size] => 500624 
     ) 

) 

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

$input4 = array_map("unserialize", array_unique(array_map("serialize", $basicinfo3))); 
$new_data3 = array_values($input4); 

Но результат все тот же, что и начальный массив. В приведенном выше коде $basicinfo имеет значение массива выше. Что я хочу сделать, это удалить дублирующийся массив, чтобы он выглядел следующим образом.

Array 
    (
     [0] => Array 
      (
       [fileid] => 7 
       [remarks] => 
       [filename] => whomovedmycheese - Copy.pdf 
       [type] => application/pdf 
       [size] => 500624 
      ) 

     [1] => Array 
      (
       [fileid] => 7 
       [remarks] => 
       [filename] => whomovedmycheese.pdf 
       [type] => application/pdf 
       [size] => 500624 
      ) 
    ) 

UPDATE

Array 
(
    [008-408-601-000-0] => Array 
     (
      [id] => 008-408-601-000 
      [lastname] => Smith 
      [firstname] => John 
      [email] => [email protected] 
      [Address] => Array 
       (
        [0] => Array 
         (
          [Language] => C++ 
         ) 

        [1] => Array 
         (
          [Language] => C++ 
         ) 

        [2] => Array 
         (
          [Language] => C++ 
         ) 

        [3] => Array 
         (
          [Language] => Java 
         ) 

        [4] => Array 
         (
          [Language] => Java 
         ) 

        [5] => Array 
         (
          [Language] => Java 
         ) 

       ) 

     ) 

    [002-408-641-000-0] => Array 
     (
      [id] => 008-408-601-000 
      [lastname] => Smith 
      [firstname] => Jack 
      [email] => [email protected] 
      [Address] => Array 
       (
        [0] => Array 
         (
          [Language] => C++ 
         ) 

        [1] => Array 
         (
          [Language] => C++ 
         ) 

        [2] => Array 
         (
          [Language] => C++ 
         ) 

        [3] => Array 
         (
          [Language] => Java 
         ) 

        [4] => Array 
         (
          [Language] => Java 
         ) 

        [5] => Array 
         (
          [Language] => Java 
         ) 

       ) 

     ) 

    [001-002-003-000-0] => Array 
     (
      [id] => 008-408-601-000 
      [lastname] => Smith 
      [firstname] => Jean 
      [email] => [email protected] 
      [Address] => Array 
       (
        [0] => Array 
         (
          [Language] => C++ 
         ) 

        [1] => Array 
         (
          [Language] => C++ 
         ) 

        [2] => Array 
         (
          [Language] => C++ 
         ) 

        [3] => Array 
         (
          [Language] => Java 
         ) 

        [4] => Array 
         (
          [Language] => Java 
         ) 

        [5] => Array 
         (
          [Language] => Java 
         ) 

       ) 

     ) 







) 
+1

Ваш вопрос неясен, пожалуйста, вы можете объяснить, с примерами? – Prakash

ответ

1

Вы не можете использовать эту функцию выше, поскольку это учитывает всю партию массива для уникальности, как вы уже можете видеть, некоторые fileid уже отличается тем же именем. Если вам это нужно на основе filename, то нормальный цикл должен быть достаточным.

В вашем примере вывода, кажется, первые найдены приоритетными, тогда простой isset должен быть в порядке.

$input4 = array(); 
foreach($basicinfo3 as $values) { 
    if(!isset($input4[$values['filename']])) { 
     $input4[$values['filename']] = $values; // if doesn't exist yet, push it 
    } 
} 

$input4 = array_values($input4); // simple reindex 

Sample Output

+0

Просто вопрос, который я хочу получить в файле fileid, является идентификатором записи в базе данных, инкремент id - лучший параметр для проверки, чем имя файла? –

+0

@HogRider хорошо, большинство ОС, которые я знаю, не позволяют дублировать имена файлов, так что да, вам нужно пойти с именем файла, а не с индексом id – Ghost

+0

что такое ОС, извините, что havent столкнулся с этим термином –

0

Вы можете использовать обычные массивы PHP для достижения этой цели.

<?php 
$data = Array 
(
    0 => Array 
     (
      "fileid" => 7, 
      "remarks" => '', 
      "filename" => "whomovedmycheese - Copy.pdf", 
      "type" => "application/pdf", 
      "size" => "500624", 
     ), 

    1 => Array 
     (
      "fileid"=> 7, 
      "remarks" => '', 
      "filename"=> "whomovedmycheese.pdf", 
      "type"=> "application/pdf", 
      "size" => "500624", 
     ), 

    2 => Array 
     (
      "fileid"=> 8, 
      "remarks"=> '', 
      "filename"=> "whomovedmycheese - Copy.pdf", 
      "type"=> "application/pdf", 
      "size" => "500624", 
     ), 

    3 => Array 
     (
      "fileid"=> 8, 
      "remarks"=> '', 
      "filename"=> "whomovedmycheese.pdf", 
      "type"=> "application/pdf", 
      "size" => "500624", 
     ) 
); 

$newArray = array(); 
foreach ($data as $file) 
{ 
    $newArray[$file['filename']] = $file; 
} 
echo "<pre>"; 
print_r($newArray); 
?> 
Смежные вопросы