2017-03-03 6 views
4

Ich möchte Duplikate nach Wert entfernen, wie Sie aus der list_title sehen können. Ich weiß, dass es mehrere Fragen und Antworten dazu gibt, aber ihre Lösung funktioniert nicht für mich. Hierphp entfernen Duplikate aus mehrdimensionalen Array von Wert

ist, was ich versucht habe:

$uniqueArray = array_map("unserialize", array_unique(array_map("serialize", $notify))); 

Ergebnis:

Array 
(
[0] => Array 
    (
     [list_id] => 86 
     [list_reference] => 130948 
     [list_title] => Offer: apartment 2+kk 
     [list_city] => Prague 
     [list_date] => 2017-03-03 11:20:35 
     [list_status] => 0 
     [list_creator] => Company A 
     [list_price] => 30000 
     [list_furniture] => ["1","0","0"] 
     [list_accommodation] => flat 
    ) 

[1] => Array 
    (
     [list_id] => 87 
     [list_reference] => 130947 
     [list_title] => Offer: apartment 2+kk 
     [list_date] => 2017-03-03 11:20:35 
     [list_status] => 0 
     [list_creator] => Company B 
     [list_price] => 30000 
     [list_furniture] => ["1","0","0"] 
     [list_accommodation] => flat 
    ) 

[2] => Array ... 

Erwartetes Ergebnis sollte aufgrund der Titel einer von denen sein:

Array 
(
[0] => Array 
(
    [list_id] => 86 
    [list_reference] => 130948 
    [list_title] => Offer: apartment 2+kk 
    [list_city] => Prague 
    [list_date] => 2017-03-03 11:20:35 
    [list_status] => 0 
    [list_creator] => Company A 
    [list_price] => 30000 
    [list_furniture] => ["1","0","0"] 
    [list_accommodation] => flat 
) 
+0

Ist LIST_ID einzigartig? Also möchten Sie Arrays mit der gleichen list_id entfernen? – iyop45

+0

und wie sollte das Endergebnis aussehen? – RomanPerekhrest

+0

@RomanPerekrest Ich habe meine Frage mit dem erwarteten Ergebnis bearbeitet – Shina

Antwort

2

Versuchen Sie, diese

<?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; 
    } 
    ?> 
+0

Danke, aber ich habe das auch versucht, hat nicht funktioniert. Siehe meine bearbeitete Frage für das erwartete Ergebnis – Shina

+0

ist diese Antwort wird sich um Raumkomplexität und Zeitkomplexität kümmern? – Manmohan

+0

Keine Notwendigkeit, sich darum zu kümmern. –

0

Führen Sie einfach eine Schleife durch die Arrays und verfolgen Sie doppelte Feldeinträge.

Nur die list_id und list_title werden für doppelte Arrays in Betracht gezogen, aber zusätzliche Felder können hinzugefügt werden. Alle anderen Schlüssel werden ignoriert.

<?php 

$array = [ 
    [ 
     "list_id" => 86, 
     "list_reference" => 130948, 
     "list_title" => "Offer: apartment 2+kk", 
     "list_city" => "Prague", 
     "list_date" => "2017-03-03 11:20:35", 
     "list_status" => 0, 
     "list_creator" => "Company A", 
     "list_price" => 30000, 
     "list_furniture" => '""1","0","0""', 
     "list_accommodation" => "flat" 
    ], 
    [ 
     "list_id" => 87, 
     "list_reference" => 130947, 
     "list_title" => "Offer: apartment 2+kk", 
     "list_date" => "2017-03-03 11:20:35", 
     "list_status" => 0, 
     "list_creator" => "Company B", 
     "list_price" => 30000, 
     "list_furniture" => '""1","0","0""', 
     "list_accommodation" => "flat" 
    ] 
]; 


$duplicateFields = ["list_id" => array(), "list_title" => array()]; 
foreach ($array as $index => $value) { 
    if(in_array($value['list_id'], $duplicateFields['list_id']) || in_array($value['list_title'], $duplicateFields['list_title'])){ 
     unset($array[$index]); 
    }else{ 
     array_push($duplicateFields['list_id'], $value['list_id']); 
     array_push($duplicateFields['list_title'], $value['list_title']); 
    } 
} 

var_dump($array); 

Welche ergibt:

array(1) { 
    [0]=> 
    array(10) { 
    ["list_id"]=> 
    int(86) 
    ["list_reference"]=> 
    int(130948) 
    ["list_title"]=> 
    string(22) "Offer: apartment 2+kk" 
    ["list_city"]=> 
    string(6) "Prague" 
    ["list_date"]=> 
    string(19) "2017-03-03 11:20:35" 
    ["list_status"]=> 
    int(0) 
    ["list_creator"]=> 
    string(9) "Company A" 
    ["list_price"]=> 
    int(30000) 
    ["list_furniture"]=> 
    string(13) """1","0","0""" 
    ["list_accommodation"]=> 
    string(4) "flat" 
    } 
} 
1

Also im Grunde wollen Sie Duplikate von 'list_title' Spalte entfernen. Nehmen wir an, wir behalten das erste Vorkommen dieses Titels. Dann können Sie ein paar Standard-Funktionen verwenden, um dies zu erreichen:

// Reverse array, so the first occurrence kept. 
$data = array_reverse($data); 

$result = array_reverse(// Reverse array to the initial order. 
    array_values(// Get rid of string keys (make array indexed again). 
     array_combine(// Create array taking keys from column and values from the base array. 
      array_column($data, 'list_title'), 
      $data 
     ) 
    ) 
); 

Hier working demo ist.

+0

Funktioniert perfekt. –

1

Danke an alle, manchmal überdenken kann den gesunden Menschenverstand beeinflussen.

Ich löste es einfach aus MYSQL Abfrage mit so etwas wie:

GROUP BY list_title ORDER BY list_date 
Verwandte Themen