2017-10-28 1 views
1

Ich habe ein mehrdimensionales Array wie diesemit Ausnahme von Datum

Array 
(
    [0] => Array 
     (
      [name] => test 
      [c1] => flower 
      [c2] => fruit 
      [date] => 2017-10-05 10:44:05 
     ) 

    [1] => Array 
     (
      [name] => test 
      [c1] => flower 
      [c2] => fruit 
      [date] => 2017-10-06 10:44:08 
     ) 

    [2] => Array 
     (
      [name] => test1 
      [c1] => chicken 
      [c2] => fruit 
      [date] => 2017-10-07 10:44:10 
     ) 
    [3] => Array 
     (
      [name] => test2 
      [c1] => flower 
      [c2] => cow 
      [date] => 2017-10-08 10:44:15 
     ) 
) 

Also habe ich diese Funktion bin mit einzigartigen Arrays aus einem mehrdimensionalen Array auszuwählen (ref: http://phpdevblog.niknovo.com/2009/01/using-array-unique-with-multidimensional-arrays.html) Dieser Link hat die antworte darauf, warum ich auch die php-funktion array_unique() nicht verwende.

function arrayUnique($array, $preserveKeys = true) 
{ 
    // Unique Array for return 
    $arrayRewrite = array(); 
    // Array with the md5 hashes 
    $arrayHashes = array(); 
    foreach($array as $key => $item) { 
     // Serialize the current element and create a md5 hash 
     $hash = md5(serialize($item)); 
     // If the md5 didn't come up yet, add the element to 
     // to arrayRewrite, otherwise drop it 
     if (!isset($arrayHashes[$hash])) { 
      // Save the current element hash 
      $arrayHashes[$hash] = $hash; 
      // Add element to the unique Array 
      if ($preserveKeys) { 
       $arrayRewrite[$key] = $item; 
      } else { 
       $arrayRewrite[] = $item; 
      } 
     } 
    } 
    return $arrayRewrite; 
} 

aber, wenn das Datum Teil der Arrays ist, schlägt die obige Funktion, weil jedes Array anderes Datum hat und dann hält es für jeden von ihnen einzigartig. Gibt es eine Möglichkeit zu vermeiden, dass Datum in der obigen Funktion verwendet wird, aber in der Ausgabe immer noch einzigartige Arrays mit Datum erhalten?

+0

Aber wenn Sie das Datum für die Eindeutigkeit der Arrays ignorieren, welches Datum sollte von 'arrayUnique'-Funktion für Multicocurences zurückgegeben werden? Der Erste? Das Letzte? Durchschnittlich? –

+0

Ich möchte das gleiche Datum, dass wir ignorieren für die Einzigartigkeit .. vielleicht irgendwie passen wir den ursprünglichen Array-Index mit Ausgabe-Array-Index und ziehen Sie das Datum? Ich weiß nicht .. Ich bin fest, weil, wenn ich das Datum von den Arrays entferne, dann sind meine Ergebnisse alle gut .. Wenn Datum Teil der Arrays ist, nimmt meine Funktion jedes Array ist einzigartig wegen des Datums. –

Antwort

1

Sicher.

function serializeWithout($array, $key = null) { 
    if (isset($key)) unset($array[$key]); 
    return serialize($array); 
} 

und ersetzen Sie den serialize Anruf in Ihrem Code mit serializeWithout($item,'date');: Ich würde eine Funktion wie verwenden. Oder Sie können einen $key Parameter zu Ihrer Funktion hinzufügen und durchreichen.

+0

Perfekt. Genau das, was ich wollte. Vielen Dank –

Verwandte Themen