Verkrijg de index van een bepaalde waarde in een array in PHP

Ik heb een array:

$list = array('string1', 'string2', 'string3');

Ik wil de index ophalen voor een bepaalde waarde (dwz 1voor string2en 2voor string3)

Ik wil alleen de positie van de strings in de array

  • string1 is 0
  • string2 is 1
  • string3 is 2

Hoe dit te bereiken?


Antwoord 1, autoriteit 100%

array_searchis de manier om het te doen.

array_search ( mixed $needle , array $haystack [, bool $strict = FALSE ] ) : mixed

Van de documenten:

$array = array(0 => 'blue', 1 => 'red', 2 => 'green', 3 => 'red');
$key = array_search('green', $array); // $key = 2;
$key = array_search('red', $array);   // $key = 1;

Je zou de array handmatig kunnen doorlopen en de index vinden, maar waarom zou je dat doen als daar een functie voor is. Deze functie retourneert altijd een sleutel en werkt goed met associatieve en normale arrays.


Antwoord 2, autoriteit 10%

Als je er maar een paar doet (en/of de array is groot), dan was je op de goede weg met array_search:

$list = array('string1', 'string2', 'string3');
$k = array_search('string2', $list); //$k = 1;

Als je ze allemaal (of veel) wilt, is een lus waarschijnlijk beter:

foreach ($list as $key => $value) {
    echo $value . " in " . $key . ", ";
}
// Prints "string1 in 0, string2 in 1, string3 in 2, "

Antwoord 3, autoriteit 7%

Andere mensen hebben array_search()voorgesteld die de sleutel geeft van het array-element waar de waarde wordt gevonden. U kunt ervoor zorgen dat de arraysleutels aaneengesloten gehele getallen zijn door array_values()te gebruiken:

$list = array(0=>'string1', 'foo'=>'string2', 42=>'string3');
$index = array_search('string2', array_values($list));
print "$index\n";
// result: 1

U zei in uw vraag dat array_search()geen zin had. Kan je uitleggen waarom? Wat heb je geprobeerd en hoe voldeed het niet aan je behoeften?


Antwoord 4, autoriteit 6%

Het probleem is dat u geen numerieke index in uw array heeft.
Door array_values() te gebruiken, wordt een nul-geïndexeerde array gemaakt die u vervolgens kunt doorzoeken met array_search() zonder dat u een for-lus hoeft te gebruiken.

$list = ['string1', 'string2', 'string3'];
$index = array_search('string2',array_values($list));

5

Hier is een functie die werkt voor numerieke of tekenreeksindexen. Geef de array door als eerste parameter, dan de index naar het element dat moet worden verplaatst en stel ten slotte de richting in op -1 om het element naar boven te verplaatsen en naar 1 om het naar beneden te verplaatsen. Voorbeeld: Move([‘first’=>’Peter’,’second’=>’Paul’,’third’=>’Kate’],’second’,-1) zal Paul naar boven en Peter naar beneden verplaatsen .

function Move($a,$element,$direction)
{
$temp = [];
$index = 0;
foreach($a as $key=>$value)
{
    $temp[$index++] = $key;
}
$index = array_search($element,$temp);
$newpos = $index+$direction;
if(isset($temp[$newpos]))
{
        $value2 = $temp[$newpos];
        $temp[$newpos]=$element;
        $temp[$index]=$value2;
}
else
{
    # move is not possible
    return $a; # returns the array unchanged
}   
$final = [];
foreach($temp as $next)
{
    $final[$next]=$a[$next];
}
return $final;

}

Other episodes