Heim > Backend-Entwicklung > PHP-Tutorial > Welche Datenstruktur muss PHP haben, um eine bidirektionale Indexabfrage zu implementieren?

Welche Datenstruktur muss PHP haben, um eine bidirektionale Indexabfrage zu implementieren?

WBOY
Freigeben: 2016-08-10 09:07:16
Original
1254 Leute haben es durchsucht

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>
Nach dem Login kopieren
Nach dem Login kopieren

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.

Antwortinhalt:

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>
Nach dem Login kopieren
Nach dem Login kopieren

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren
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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren
Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage