2016-11-10 2 views
2

Ich versuche zu finden, wenn das Array hat 2. Dimension Werte, die die gleichen sind, damit ich damit umgehen kann.Suchen Sie sich wiederholende Werte im mehrdimensionalen Array

Ich habe mir array_unique und andere Leute angesehen, die eine ähnliche Frage stellen, aber sie alle löschen die Werte, anstatt sie zurückzugeben.

sagen, dass ich ein Array wie diese:

array(
    [0] => array(
     [laps] => 7, 
     [corrected_time] => 18 
    ), 
    [1] => array(
     [laps] => 6, 
     [corrected_time] => 18 
    ), 
    [2] => array(
     [laps] => 7, 
     [corrected_time] => 18.5 
    ) 
) 

Ich mag würde, es haben zurück: array(0,1), weil sie beide für den gleichen Wert haben corrected time

+0

Warte zu bekommen. Wird es nur gegriffen, wenn 'corrected_time' wiederholt wird? – Jay

+1

Wie wäre es mit 'array_unique', Duplikate zu entfernen, dann' array_diff', um die Werte zu entfernen? –

+0

@Jay Ja, Entschuldigung, dass ich das nicht klargestellt habe, ich habe die Frage –

Antwort

2

hier ein Ansatz. Holen Sie zuerst die Werte für corrected_time und konvertieren Sie sie in Zeichenfolgen (weil wir sie in array_count_values verwenden, die nur auf Ints und Strings funktioniert).

$times = array_map('strval', array_column($your_array, 'corrected_time')); 

Dann alle Werte finden, die mehr als einmal mit array_count_values und array_filter auftreten.

$repeats = array_filter(array_count_values($times), function($time) { 
    return $time > 1; 
}); 

Nachdem Sie diese Liste der wiederholten Male haben, können Sie es use Ihre ursprüngliche Array zu filtern, um nur Elemente mit wiederholten Zeiten enthalten.

$multiples = array_filter($your_array, function($item) use ($repeats){ 
    return isset($repeats[(string) $item['corrected_time']]); 
}); 

Sie können über diese durchlaufen, oder wenn Sie nur die Schlüssel möchten, können Sie sie mit

$keys = array_keys($multiples); 
+0

aktualisiert. Das scheint viel komplizierter als die andere Antwort. –

+0

Haben Sie die andere Antwort mit einer größeren Menge von Werten getestet, um zu sehen, ob es wirklich was tut Brauchen Sie es? Es scheint mir, dass es nur zufälligerweise für das Beispiel aus Ihrer Frage funktioniert. –

+0

Sie haben Recht, ich habe einige Tests durchgeführt und festgestellt, dass die andere Antwort die Aufgabe nicht geeignet abschließt. –

Verwandte Themen