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

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

WBOY
發布: 2016-08-10 09:07:16
原創
1252 人瀏覽過

我也不知道該怎麼表達,總之需求有點類似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>
登入後複製
相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板