2017-06-04 4 views
1

Ich würde mich über ein wenig Hilfe freuen. Ich habe versucht array_diff(), überschneiden Combos, aber nicht in der Lage, meine erwartete Rendite zu bekommen.PHP - array_diff alle ähnlichen Werte werden verglichen und entfernt

Hier ist ein Beispiel, was ich tun möchte.

Erstes Array.

Array 
(
    [0] => 21 
    [1] => 2 
    [2] => 1 
    [3] => 2 
) 

zweite Array

Array 
(
    [0] => 21 
    [1] => 2 
) 

mit array_diff(firstarray, secondarray) i folgende erhalten.

Array 
(
    [2] => 1 
) 

Aber was ich

wollen
Array 
(
    [2] => 1 
    [3] => 2 
) 

Schlüssel von first und second notwendigerweise gleich sein pflegt.

+3

Sie haben eine eigene Funktion zu schreiben, diese –

+0

zu tun Warum woul Willst du auch die 2? –

Antwort

0

Dieses kleine Snippet sollte Ihnen helfen zu erreichen, was Sie wollen. Hier werden wir das zweite Array loopen und das erste Auftreten jedes gefundenen Wertes aus dem ersten Array entfernen.

$first = array(0 => 21, 1 => 2, 2 => 1, 3 => 2); 
$second = array(0 => 21, 1 => 2); 

foreach ($second as $v) { 
    unset($first[array_search($v, $first)]); 
} 

Ausgabe von $first nach Looping:

Array 
(
    [2] => 1 
    [3] => 2 
) 

Wenn Sie das $first Array intakt halten möchten, kopieren Sie sie in eine andere Variable, und Schleife, dass, dh $new = $first; und ungesetzt von $new statt $first .

Live demo

0
function array_true_diff($arrayOne, $arrayTwo = []) { 
    if (count($arrayOne) < count($arrayTwo)) { 
     $tmp = $arrayOne; 
     $arrayOne = $arrayTwo; 
     $arrayTwo = $tmp; 
    } 

    $diffs = []; 
    foreach ($arrayOne as $key => $value) { 
     if (!isset($arrayTwo[$key]) || $arrayTwo[$key] !== $value) { 
      $diffs[$key] = $value; 
     } 
    } 
    return $diffs; 
} 

print_r(array_true_diff(firstarray, secondarray))

Above Funktion könnte Ihre Anforderung erfüllen.

0

in diesem Fall können Sie „in_array“ verwenden, wenn zu überprüfen existiert und „array_search“ den Schlüssel und „nicht gesetzt“, um ein Element aus dem Array wie folgt zu löschen:

$array1 = array(21, 2, 1, 2); 
    $array2 = array(21, 2); 
    $result = array(); 
    for ($i=0; $i < count($array1) ; $i++) { 
     if (in_array($array1[$i], $array2)) { 
      unset($array2[array_search($array1[$i], $array2)]); 
     } else { 
      array_push($result,$array1[$i]); 
     } 
    } 

und der Ausgang sein:

Array ([0] => 1 [1] => 2) 
0

Try unten Funktion:

function arrayDiff($a, $b) { 

    $a = array_count_values($a); 
    $b = array_count_values($b); 

    $out = array(); 

    foreach($a as $key => $value) { 

     if(isset($b[ $key ])) { 
      $value -= $b[ $key ]; 
     } 

     $out = array_merge($out, array_fill(0, $value, $key)); 
    } 

    return $out; 
} 

print_r(arrayDiff($a, $b)); 
Verwandte Themen