array (leere Elemente löschen)

Neurodeamon

Erfahrenes Mitglied
Folgender Problemfall:

Ich vergleiche zwei Arrays und suche alle Elemente die NICHT in beiden Arrays vorkommen:

$result = array_diff ($array1, $array2);

Das Ergebnis "$result" ist:

Array
(
[0] => Element1
[2] => Element2
[10] => Element10
)

Was ich brauche ist jedoch:

Array
(
[0] => Element1
[1] => Element2
[2] => Element10
)

also eine aufeinanderfolgende Reihung der Elemente und nicht "Element UND alte Position".

Weiß jemand wie ich das am elegantesten löse?

Kommt mir jetzt nicht mit sort(), das sortiert zwar die elemente, aber nicht [0].

Danke !
 
vergleich die arrays doch einfach selber:
Code:
$k = 0;
for ($i = 0; $i < count($array1); $i++)
{
  for ($j = 0; $j < count($array2); $j++)
  {
    if ($array1[$i] == $array2[$j])
    {
      $k++;
      $array3[$k] = $array1[$i];
    }
  }
}
allerdings ohne gewähr.

oder hab ich die frage gar nicht ganz richtig verstanden?
 
Die Funktionen die du sucht heisst array_values().
Ist aber erst ab PHP4 implementiert.

sonst kann man auch so schreiben
PHP:
function array_values ($arr) {
  $t = array();
  while (list($k, $v) = each ($arr)) {
    $t[] = $v;
  }
  return $t;
}

Dein code:
PHP:
$result = array_values( array_diff ($array1, $array2));
 
@maximka:

Danke, das war genau was ich gesucht habe. Auf der php.net Site habe ich bei der übersicht

"array_values -- Return all the values of an array"

mißverstanden und verzweifelt nach einer lösung gesucht.

:)

@asphyxia:

Das Vergleichen funktionierte ja. Es ging mir nur um den Reindex der Werte mit aufeinanderfolgendem index.

also nicht 1,3,4,6 sondern 1,2,3,4

Problem gelöst, danke!!!!
 

Neue Beiträge

Zurück