首頁  >  文章  >  後端開發  >  java - php有什麼資料結構可以實現雙向索引查詢?

java - php有什麼資料結構可以實現雙向索引查詢?

WBOY
WBOY原創
2016-08-10 09:07:161209瀏覽

我也不知道該怎麼表達,總之需求有點類似C#裡面的linq,
假如有如下數組

<code>$test = [
    'a'=>'a1',
    'b'=>'a1',
    'c'=>'c1',
]
</code>

我現在可以透過$test['a']查詢到'a1',但是我也想透過'a1'來反查到'a'和'b'兩個元素,請問如何在php中實現這個?

補充:有人說用foreach實現,但是我這個數組到後期有可能非常大,甚至大到幾千上萬,用foreach肯定效率不高。

已有的解決方案只能解決每個數組元素鍵值不一樣的情況,也就是一對一映射的情況,1是array_search,2是先array_flip再用傳統的$test['a1']查找。

回覆內容:

我也不知道該怎麼表達,總之需求有點類似C#裡面的linq,
假如有如下數組

<code>$test = [
    'a'=>'a1',
    'b'=>'a1',
    'c'=>'c1',
]
</code>

我現在可以透過$test['a']查詢到'a1',但是我也想透過'a1'來反查到'a'和'b'兩個元素,請問如何在php中實現這個?

補充:有人說用foreach實現,但是我這個數組到後期有可能非常大,甚至大到幾千上萬,用foreach肯定效率不高。

已有的解決方案只能解決每個數組元素鍵值不一樣的情況,也就是一對一映射的情況,1是array_search,2是先array_flip再用傳統的$test['a1']查找。

手冊中的array_search可以解決你的需求。

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

在群組裡面請教大神解決了,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>

直接上程式碼吧! ~

沒啥好辦法,兩個陣列來搞吧

謝謝邀請, 因為數組結構的key肯定是唯一的, 但可能不同的key對應相同的值, 所以我所知道的, 要想實現c#linq, 需要保證數組的值唯一,

<code class="php">$test = [
    'a' => 'a1',
    'b' => 'b1',
    'c' => 'c1',
    'd' => 'd1',
    'e' => 'd1'
];

//去除重复的值
$test = array_unique($test);</code>

去除重複值後, 使陣列反轉,

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

反轉結構把原數組的key當作值, 原數組的value 作為key, 如下

<code>array(4) {
  ["a1"]=> string(1) "a"
  ["b1"]=> string(1) "b"
  ["c1"]=> string(1) "c"
  ["d1"]=> string(1) "d"
}</code>

現在, 可以實現類似c#的linq功能了

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

不足之處請多指出,,,

不就是根據值查詢鍵麼,一個 array_keys 就能解決了呀:

<code>$arr = array('a' => 'a1', 'b' => 'a1', 'c' => 'c1');
var_export( array_keys($arr, 'a1') ); //输出键名 a 和 b</code>
陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn