Frage

Hallo zusammen, ich versuche, doppelte x-Werte aus diesem Array zu finden, sie zu entfernen und nur die eindeutigen zu belassen.Zum Beispiel ist mein Array

Array
(
[0] => Array
    (
        [x] => 0.5
        [y] => 23
    )

[1] => Array
    (
        [x] => 23
        [y] => 21.75
    )

[2] => Array
    (
        [x] => 14.25
        [y] => 21.875
    )

[3] => Array
    (
        [x] => 19.375
        [y] => 21.75
    )

[4] => Array
    (
        [x] => 9.125
        [y] => 21.875
    )

[5] => Array
    (
        [x] => 23
        [y] => 19.625
    )

[6] => Array
    (
        [x] => 19.375
        [y] => 19.625
    ) 
)

Was ich also tun muss, ist, das Ganze zu durchlaufen und den ersten x-Wert als .5 zu sehen, dann fortzufahren und alles, was sonst noch x als .5 hat, aus dem Array zu entfernen, sodass ich am Ende ein Array habe, das so aussieht

 Array
   (
[0] => Array
    (
        [x] => 0.5
        [y] => 23
    )

[1] => Array
    (
        [x] => 23
        [y] => 21.75
    )

[2] => Array
    (
        [x] => 14.25
        [y] => 21.875
    )

[3] => Array
    (
        [x] => 19.375
        [y] => 21.75
    )

[4] => Array
    (
        [x] => 9.125
        [y] => 21.875
    )
)

wobei alle X-Werte eindeutig sind.Ich habe online gesucht und diese Funktion gefunden, aber sie scheint nicht zu funktionieren:

 $result = array_map("unserialize", array_unique(array_map("serialize", $array)));    
War es hilfreich?

Lösung

Fahren Sie einfach durch und finden Sie einzigartige Werte, wie Sie gehen:

generasacodicetagpre.

Jedes zum ersten Mal, wenn der generationspoDiCETAGCODE-Wert verwendet wird, sparen wir es - und nachfolgende Verwendungen sind generellaDiCedagcode aus dem Array.

Andere Tipps

array_unique vergleicht Zeichenfolgenwerte, sodass Sie Objekte erstellen können (mit einer überlasteten generationspflichtigen Funktion) als Zwischenschritt.

generasacodicetagpre.

das Ergebnis:

generasacodicetagpre.

Bei der Durchführung wiederholter Prüfungen von Arrays nimmt die Leistung ab in_array() wird sich mit zunehmender Größe Ihres temporären Suchfelds zunehmend verschlechtern.

Verwenden Sie vor diesem Hintergrund temporäre assoziative Schlüssel, um nachfolgende Duplikate zu identifizieren !isset() kann für Ihre wachsende Ergebnisvariable aufgerufen werden.Da es sich bei PHP-Arrays um Hash-Maps handelt, ist diese Technik immer besser in_array().

Es gibt ein Problem mit diesen temporären Schlüsseln, das speziell für Ihre Float-Typ-Werte gilt. Wenn Gleitkommazahlen als Array-Schlüssel verwendet werden, wandelt PHP sie durch Abschneiden („Bodenbildung“, nicht „Rundung“) in Ganzzahlen um.Um diesen unerwünschten Nebeneffekt zu vermeiden, stellen Sie den temporären Schlüsseln ein nicht numerisches Zeichen (natürlich außer einem Bindestrich) voran, sodass das Gleitkomma zu einer Zeichenfolge wird.

Code:(Demo)

$array = [
    ['x' => 0.5, 'y' => 23],
    ['x' => 23, 'y' => 21.75],
    ['x' => 14.25, 'y' => 21.875],
    ['x' => 19.375, 'y' => 21.75],
    ['x' => 9.125, 'y' => 21.875], 
    ['x' => 23, 'y' => 19.625],
    ['x' => 19.375, 'y' => 19.625],
];

foreach ($array as $row) {
    if (!isset($result['#' . $row['y']])) {
        $result['#' . $row['y']] = $row;
    }
}
var_export(array_values($result));

Ausgabe:

array (
  0 => 
  array (
    'x' => 0.5,
    'y' => 23,
  ),
  1 => 
  array (
    'x' => 23,
    'y' => 21.75,
  ),
  2 => 
  array (
    'x' => 14.25,
    'y' => 21.875,
  ),
  3 => 
  array (
    'x' => 23,
    'y' => 19.625,
  ),
)

p.s.Wenn Sie Zeichenfolgen- oder Ganzzahlwerte als temporäre Schlüssel verwenden, müssen keine Zeichen vorangestellt werden.Wenn es Ihnen egal ist, die temporären Schlüssel aus dem Ergebnis zu entfernen (weil Sie nur auf die Subarray-Werte „down script“ zugreifen), müssen Sie nicht aufrufen array_values() nach der Iteration.

generasacodicetagpre.
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top