分享:PHP從陣列中找到指定元素的位置
阿新 • • 發佈:2018-12-09
群裡有人問,有個陣列五個元素 分為1到5 現在要求 迴圈找出3元素的索引,怎麼做效能才是最高。
我不知道哪個效能最高,但是我想提出可以用多種方式進行查詢,然後進行比較選擇。
我想,最簡單最基礎的 應該是迴圈,迴圈到它,那就是它。當然也可以用PHP提供的陣列查詢 array_search。這都是能想得到的,那麼我想說的是,劍走偏鋒,老鐵是否嘗試過 鍵值反轉進行查詢呢?
array_flip鍵值反轉,能夠將你需要的鍵變值,值變鍵,然後取陣列下標,即可得到這個位置。
程式碼如下:
<?php $array=array(2,3,4,1,5); //找到3所處的位置 $find=3; //第一種方式 迴圈解決 此舉類似於 for while等迴圈 function find_by_foreach($array,$find) { foreach ($array as $key => $v) { if($v==$find) { return $key; } } } //第二種方式 利用陣列查詢 找到所需要元素的索引位置 function find_by_array_search($array,$find) { return array_search($find,$array); } //第三種方式 鍵值反轉 通過值查詢鍵 function find_by_array_flip($array,$find) { $array=array_flip($array); return $array[$find]; } var_dump(find_by_foreach($array,$find)); var_dump(find_by_array_search($array,$find)); var_dump(find_by_array_flip($array,$find));
效果如圖:
好,我們再考慮一個問題,剛剛我們都在用陣列的思維進行解決問題,如果說,這個陣列不想被迴圈,或者放棄陣列的思路又該如何解決呢?
很自然,我們可以想到依靠字串。那麼字串的函式也是非常多的,PHP在這方面的功勞是不遺餘力。
程式碼如下:
<?php //第四種方式 字串查詢 function find_by_string($array,$find) { $string=implode http://www.aivtp.com/ ($array); return strpos($string,$find.""); }
效果如圖:
針對本題而言,字串查詢是可行的,但是如果換一個場景,陣列中出現了重複或者要查詢的元素,不能出現完整匹配的情況的時候,這個查詢就是失敗的,請思考一下這是為什麼。