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
WBOYOriginal
2016-08-10 09:07:161255Durchsuche

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.

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>

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>
Stellungnahme:
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