Heim >Backend-Entwicklung >PHP-Tutorial >Welche Datenstruktur muss PHP haben, um eine bidirektionale Indexabfrage zu implementieren?
Ich weiß nicht, wie ich es ausdrücken soll. Kurz gesagt, die Anforderung ähnelt in gewisser Weise Linq in C#
Wenn es das folgende Array gibt
<code>$test = [ 'a'=>'a1', 'b'=>'a1', 'c'=>'c1', ] </code>
Ich kann jetzt 'a1' über $test['a'] abfragen, aber ich möchte auch die beiden Elemente 'a' und 'b' über 'a1' abfragen, bitte fragen Sie nach der Vorgehensweise Dies in PHP implementieren?
Ergänzung: Einige Leute empfehlen, foreach zur Implementierung zu verwenden, aber mein Array kann in der späteren Phase sehr groß sein, sogar Tausende oder Zehntausende, sodass die Verwendung von foreach definitiv nicht effizient ist.
Die vorhandenen Lösungen können nur die Situation lösen, in der der Schlüsselwert jedes Array-Elements unterschiedlich ist, d. h. die Eins-zu-Eins-Zuordnungssituation 1 ist array_search, 2 ist array_flip und verwendet dann den herkömmlichen $test[. 'a1'] Finden.
Ich weiß nicht, wie ich es ausdrücken soll. Kurz gesagt, die Anforderung ähnelt in gewisser Weise Linq in C#
Wenn es das folgende Array gibt
<code>$test = [ 'a'=>'a1', 'b'=>'a1', 'c'=>'c1', ] </code>
Ich kann jetzt 'a1' über $test['a'] abfragen, aber ich möchte auch die beiden Elemente 'a' und 'b' über 'a1' abfragen, bitte fragen Sie nach der Vorgehensweise Dies in PHP implementieren?
Ergänzung: Einige Leute empfehlen, foreach zur Implementierung zu verwenden, aber mein Array kann in der späteren Phase sehr groß sein, sogar Tausende oder Zehntausende, sodass die Verwendung von foreach definitiv nicht effizient ist.
Die vorhandenen Lösungen können nur die Situation lösen, in der der Schlüsselwert jedes Array-Elements unterschiedlich ist, d. h. die Eins-zu-Eins-Zuordnungssituation 1 ist array_search, 2 ist array_flip und verwendet dann den herkömmlichen $test[. 'a1'] Finden.
array_search im Handbuch kann Ihre Anforderungen lösen.
<code class="php"><?php $array = array(0 => 'blue', 1 => 'red', 2 => 'green', 3 => 'red'); $key = array_search('green', $array); // $key = 2; $key = array_search('red', $array); // $key = 1; ?> </code>
Bitten Sie die Experten in der Gruppe, das Problem zu lösen, einfach array_keys.
<code><?php $a=array("a"=>"Dog","b"=>"Dog","c"=>5,"d"=>"5"); print_r(array_keys($a,"Dog")); //Array ( [0] => a [1] => b ) ?> </code>
Gehen Sie einfach zum Code! ~
Es gibt keinen guten Weg, machen wir es mit zwei Arrays
Vielen Dank für die Einladung, denn das key
der Array-Struktur ist definitiv einzigartig, aber unterschiedliche key
können, soweit ich weiß, dem gleichen Wert entsprechen, um das c#
von zu implementieren linq
, Sie müssen sicherstellen, dass das Array Der Wert ist eindeutig,
<code class="php">$test = [ 'a' => 'a1', 'b' => 'b1', 'c' => 'c1', 'd' => 'd1', 'e' => 'd1' ]; //去除重复的值 $test = array_unique($test);</code>
Nachdem Sie doppelte Werte entfernt haben, kehren Sie das Array um,
<code class="php">$test = [ 'a' => 'a1', 'b' => 'b1', 'c' => 'c1', 'd' => 'd1', 'e' => 'd1' ]; $test = array_unique($test); $wocao = array_flip($test); var_dump($wocao); </code>Die
-Inversionsstruktur behandelt den key
des ursprünglichen Arrays als Wert und den value
des ursprünglichen Arrays als key
, wie folgt
<code>array(4) { ["a1"]=> string(1) "a" ["b1"]=> string(1) "b" ["c1"]=> string(1) "c" ["d1"]=> string(1) "d" }</code>
Jetzt können Linq-Funktionen ähnlich zu c#
implementiert werden
<code>$test = [ 'a' => 'a1', 'b' => 'b1', 'c' => 'c1', 'd' => 'd1', 'e' => 'd1' ]; $test = array_unique($test); $wocao = array_flip($test); $test['a']; //a1 $wocao['a1']; //a</code>
Bitte weisen Sie auf eventuelle Mängel hin,,,
Ist es nicht einfach, den Schlüssel basierend auf dem Wert abzufragen? Ein array_keys kann das Problem lösen:
<code>$arr = array('a' => 'a1', 'b' => 'a1', 'c' => 'c1'); var_export( array_keys($arr, 'a1') ); //输出键名 a 和 b</code>