Ich habe ein Array:
$list = array('string1', 'string2', 'string3');
Ich möchte den Index für einen bestimmten Wert erhalten (dh 1
für string2
und 2
für string3
)
Ich möchte nur die Position der Zeichenfolgen im Array
- string1 ist 0
- string2 ist 1
- string3 ist 2
Wie erreicht man das?
Antworten:
array_search
ist der Weg, es zu tun.Aus den Dokumenten :
$array = array(0 => 'blue', 1 => 'red', 2 => 'green', 3 => 'red'); $key = array_search('green', $array); // $key = 2; $key = array_search('red', $array); // $key = 1;
Sie könnten das Array manuell durchlaufen und den Index finden, aber warum, wenn es eine Funktion dafür gibt? Diese Funktion gibt immer einen Schlüssel zurück und funktioniert gut mit assoziativen und normalen Arrays.
quelle
Wenn Sie nur einige davon ausführen (und / oder das Array groß ist), waren Sie mit array_search auf dem richtigen Weg:
$list = array('string1', 'string2', 'string3'); $k = array_search('string2', $list); //$k = 1;
Wenn Sie alle (oder viele von ihnen) wollen, wird eine Schleife Sie wahrscheinlich besser machen:
foreach ($list as $key => $value) { echo $value . " in " . $key . ", "; } // Prints "string1 in 0, string2 in 1, string3 in 2, "
quelle
Andere Leute haben vorgeschlagen
array_search()
, den Schlüssel des Array-Elements anzugeben, in dem sich der Wert befindet. Sie können sicherstellen, dass die Array-Schlüssel zusammenhängende Ganzzahlen sind, indem Sie Folgendes verwendenarray_values()
:$list = array(0=>'string1', 'foo'=>'string2', 42=>'string3'); $index = array_search('string2', array_values($list)); print "$index\n"; // result: 1
Sie sagten in Ihrer Frage, das
array_search()
sei sinnlos. Kannst du erklären warum? Was haben Sie versucht und wie hat es Ihre Bedürfnisse nicht erfüllt?quelle
// oder unter Berücksichtigung Ihrer Array-Struktur:
$array = array( 'string1' => array('a' => '', 'b' => '', 'c' => ''), 'string2' => array('a' => '', 'b' => '', 'c' => ''), 'string3' => array('a' => '', 'b' => '', 'c' => ''), );
// du könntest einfach
function findIndexOfKey($key_to_index,$array){ return array_search($key_to_index,array_keys($array)); }
// hingerichtet
print "\r\n//-- Method 1 --//\r\n"; print '#index of: string1 = '.findIndexofKey('string1',$array)."\r\n"; print '#index of: string2 = '.findIndexofKey('string2',$array)."\r\n"; print '#index of: string3 = '.findIndexofKey('string3',$array)."\r\n";
// Alternative
print "\r\n//-- Method 2 --//\r\n"; print '#index of: string1 = '.array_search('string1',array_keys($array))."\r\n"; print '#index of: string2 = '.array_search('string2',array_keys($array))."\r\n"; print '#index of: string3 = '.array_search('string3',array_keys($array))."\r\n";
// rekursiv
print "\r\n//-- Method 3 --//\r\n"; foreach(array_keys($array) as $key => $value){ print '#index of: '.$value.' = '.$key."\r\n"; }
// Ausgänge
//-- Method 1 --// #index of: string1 = 0 #index of: string2 = 1 #index of: string3 = 2 //-- Method 2 --// #index of: string1 = 0 #index of: string2 = 1 #index of: string3 = 2 //-- Method 3 --// #index of: string1 = 0 #index of: string2 = 1 #index of: string3 = 2
quelle
Das Problem ist, dass Sie keinen numerischen Index für Ihr Array haben.
Wenn Sie array_values () verwenden, wird ein Array mit einem Index von Null erstellt, das Sie dann mit array_search () durchsuchen können, ohne dass eine for-Schleife verwendet werden muss.
$list = array('string1', 'string2', 'string3'); $index = array_search('string2',array_values($list));
quelle
Könnten Sie etwas genauer sein?
$key = array_search('string2',$list)
funktioniert gut für mich. Versuchen Sie etwas Komplexeres zu erreichen?
quelle
Dieser Code sollte mit Ihrer neuen Routine identisch sein und mit dem richtigen mehrdimensionalen Array arbeiten.
$arr = array( 'string1' => array('a' => '', 'b' => '', 'c' => ''), 'string2' => array('a' => '', 'b' => '', 'c' => ''), 'string3' => array('a' => '', 'b' => '', 'c' => '') ); echo 'Index of "string2" = '. array_search('string2', array_keys($arr));
quelle
Sie müssen hierfür eine Funktion erstellen. Ich glaube nicht, dass es zu diesem Zweck eine eingebaute Funktion gibt. Alle PHP-Arrays sind standardmäßig assoziativ. Wenn Sie sich bei den Schlüsseln nicht sicher sind, finden Sie hier den Code:
<?php $given_array = array('Monday' => 'boring', 'Friday' => 'yay', 'boring', 'Sunday' => 'fun', 7 => 'boring', 'Saturday' => 'yay fun', 'Wednesday' => 'boring', 'my life' => 'boring'); $repeating_value = "boring"; function array_value_positions($array, $value){ $index = 0; $value_array = array(); foreach($array as $v){ if($value == $v){ $value_array[$index] = $value; } $index++; } return $value_array; } $value_array = array_value_positions($given_array, $repeating_value); $result = "The value '$value_array[0]' was found at these indices in the given array: "; $key_string = implode(', ',array_keys($value_array)); echo $result . $key_string . "\n";//Output: The value 'boring' was found at these indices in the given array: 0, 2, 4, 6, 7
quelle
Probieren Sie die PHP-Funktion array_keys aus.
$key_string1 = array_keys($list, 'string1');
quelle
array_keys
ist anders alsarray_search
array_search sollte einwandfrei funktionieren, hat dies nur getestet und gibt die Schlüssel wie erwartet zurück:
$list = array('string1', 'string2', 'string3'); echo "Key = ".array_search('string1', $list); echo " Key = ".array_search('string2', $list); echo " Key = ".array_search('string3', $list);
Oder für den Index könnten Sie verwenden
$list = array('string1', 'string2', 'string3'); echo "Index = ".array_search('string1', array_merge($list)); echo " Index = ".array_search('string2', array_merge($list)); echo " Index = ".array_search('string3', array_merge($list));
quelle
$find="Topsite"; $list=array("Tope","Ajayi","Topsite","Infotech"); $list_count=count($list); sort($list); for($i=0;$i<$list_count;$i++) { if($list[$i]==$find){ $position=$i; } } echo $position;
quelle
Hier ist eine Funktion, die für numerische oder String-Indizes funktioniert. Übergeben Sie das Array als ersten Parameter und dann den Index an das Element, das verschoben werden muss, und setzen Sie schließlich die Richtung auf -1, um das Element nach oben und 1 zu verschieben, um es nach unten zu verschieben. Beispiel: Verschieben (['erster' => 'Peter', 'zweiter' => 'Paul', 'dritter' => 'Kate'], 'zweiter', - 1) bewegt Paul nach oben und Peter nach unten.
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;
}}
quelle