Gå til innhold

Om array1 inneholder samme ting som array2


Anbefalte innlegg

Hei!

Ble kansje litt dårlig tittel, men hvertfall;

Hvis jeg f.eks har disse to arrayene:

$fu=array("asd", "asd2", "asd3");
$bar=array("asd", "asd3");

 

Hvordan kan jeg da sjekke om $fu inneholder alt som er i $bar selv om tingene ikke er i samme rekkefølge? Hadde også vært greit hvis det var en måte for å finne ut hva som manglet..

 

Har ikke funnet noen funksjon for dette enda, så den eneste måten jeg har kommet på er å kjøre en for løkke på det ene arrayet også sjekke det opp mot det andre med in_array()..

Endret av 0lav
Lenke til kommentar
Videoannonse
Annonse

prøv

 

if($array1 === $array2) blablabla;

 

 

 

det funker med == og ===...

 

<?php

$array1 = array('test', 'test2', 'test3');
$array2 = array('test', 'test2', 'test3');
$array3 = array('test1', 'test2', 'test3');

if($array1 == $array2) echo("ok1");
if($array1 == $array3) echo("ok2");

if($array1 === $array2) echo("ok3");
if($array1 === $array3) echo("ok4");

?>

 

returnerer: ok1 ok3

 

 

edit:

sorry. leste liitt fort dette ble feil...

 

prøv det samme men bruk asort() rundt array variabelene. det sorterer verdiene alfanumerisk.

 

if (asort($array1) == asort($array2)) blabla;

 

/edit

Endret av grimjoey
Lenke til kommentar

grimjoey, det der blir helt feil.

 

Ihvertfall i forhold til hvordan trådstarter ønsket det

 

EDIT:

 

Tror kanskje noe slikt burde fungere, men har ikke testet ordentlig så kan hende det er feil.

 

<?php

$array = array("asd", "asd2", "asd3");
$array2 = array("asd", "asd2", "asd3");

foreach($array as $key)
{
echo $key;
echo "<br/>";
}
echo "<br/>";

if(in_array($key, $array2))
{
echo "Array no. 1 contains something inside array no. 2";
}
else 
{
echo "Nope, array no. 1 does not contain anything from array no. 2";
}

?>

Endret av -Magne-
Lenke til kommentar

Klikk for å se/fjerne innholdet nedenfor

PHP

<?php

 

$fu = array("asd""asd2""asd3");

$bar = array("asd""asd3");

$text = array("asd""asd2""asd3");

$test = array("asd""asd""asd3");

 

if(array_same($fu$bar)) echo "Samme innhold"; else echo "Ikkje samme innhold";

echo "<br />";

if(array_same($fu$text)) echo "Samme innhold"; else echo "Ikkje samme innhold";

echo "<br />";

if(array_same($test$fu)) echo "Samme innhold"; else echo "Ikkje samme innhold";

 

function array_same($fu$bar)

{

 

$i 0;

if(count($fu) != count($bar)) return false;

$count count($fu);

 

foreach($fu as $value

{

if(in_array($value$bar)) 

{

$i++;

unset($bar[array_search($value$bar)]);

}

}if($i == $count

{

return true;

} else

{

return false;

}

}

?>

 

Det er godt mulig det finst ein innebygd funksjon for dette, men koden over fungerte for meg. Det den gjør er at den looper $fu og skjekker om $bar har den variabelen. Og vist den gjør det auker den $i med ein og fjerner treffet frå $bar. Vist $i er like stor som begge arrayene på slutten må alle ha matcha.

 

Edit: Litt for sein der :/

Endret av Shadows0
Lenke til kommentar

Enkelt og greit..

 

 if (!array_diff($array1, $array2) && !array_diff($array1, $array2))  {
   // Arrayene inneholder samme data
 }

 

Den utfører en toveissjekk mot arrayene. Dersom en av dem inneholder noe den andre ikke inneholder vil en av array_diff-ene returnere ett eller flere elementer i en array.

 

Merk invertering av funksjonene.

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...