2016-07-10 21 views
1

stelle ich mir die folgende Array erhielt:Entfernen Reihe von Array, wenn Wert existieren

Array (
[0] => Array ([id] => 1 [code] => '342')
[1] => Array ([id] => 2 [code] => '765')
[2] => Array ([id] => 3 [code] => '134')
[3] => Array ([id] => 1 [code] => '999'))

Hier Array [0] [ 'id'] und Array [3] [ 'id' ] ist ein Duplikat in Bezug auf ['id']. Ich möchte eine davon entfernen (egal welche). Eigentlich dachte ich, dass ich eine Lösung mit diesem Code gefunden:

//data 
$row = $stmt->fetchALL(PDO::FETCH_ASSOC); 

$ids = array(); 
for($i = 0;$i < count($row); $i++) 
{ 
    if (in_array($row[$i]['id'], $ids)) 
     { 
      unset($row[$i]); 
      continue; 
     } 

    $ids[] = $row[$i]['id']; 

} 

print_r($row); 

Aus irgendeinem Grund funktioniert es gut mit kleinen Arrays, aber wenn ich eine Menge von Werten in es mit mehreren dublicates haben, versagt es. Irgendwelche vorschlagen, was ich vermisse?

Antwort

1

Einfache Lösung mit regulären foreach Schleife:

$rows = [ 
    ['id' => 1, 'code' => '342'], 
    ['id' => 2, 'code' => '765'], 
    ['id' => 3, 'code' => '134'], 
    ['id' => 1, 'code' => '342'] 
]; 

$ids = []; 
foreach ($rows as $k => $item) { 
    if (in_array($item['id'], $ids)){ 
     unset($rows[$k]);    
    } else { 
     $ids[] = $item['id']; 
    }  
} 

print_r($rows); 
+0

Funktioniert gut, danke für die Antwort von euch beiden, und noch einmal, sorry @Object Manipulator, dass ich es formuliert in erster Instanz falsch. –

1

Ich denke, das kann ohne Schleifen gemacht werden. Lassen Sie mich ein Beispiel zeigen:

$rows = array (
    array ('id' => 1, 'code' => '342'), 
    array ('id' => 2, 'code' => '765'), 
    array ('id' => 3, 'code' => '134'), 
    array ('id' => 1, 'code' => '342') 
); 

$input = array_map("unserialize", array_unique(array_map("serialize", $rows))); 

echo '<pre>'; 
print_r($input); 

Ausgang:

Array 
(
    [0] => Array 
    (
     [id] => 1 
     [code] => 342 
    ) 

    [1] => Array 
    (
     [id] => 2 
     [code] => 765 
    ) 

    [2] => Array 
    (
     [id] => 3 
     [code] => 134 
    ) 

) 
+0

Dank für Feedback, eigentlich habe ich etwas verpasst in der Frage, verdammt, Sorry ! Ich muss darauf hinweisen, dass es kein vollständiges Duplikat ist (wow, ich habe geschlafen). Es ist nur 'id', das ist das Duplikat oder $ Zeile [$ i] ['id'] 'in meinem Beispiel –

Verwandte Themen