PHP從數組中找到指定元素的位置

 羣裏有人問,有個數組五個元素 分爲1到5  如今要求 循環找出3元素的索引,怎麼作性能纔是最高。 php

 我不知道哪一個性能最高,可是我想提出能夠用多種方式進行查找,而後進行比較選擇。數組

我想,最簡單最基礎的 應該是循環,循環到它,那就是它。固然也能夠用PHP提供的數組查找 array_search。這都是能想獲得的,那麼我想說的是,劍走偏鋒,老鐵是否嘗試過 鍵值反轉進行查找呢?函數

array_flip鍵值反轉,可以將你須要的鍵變值,值變鍵,而後取數組下標,便可獲得這個位置。性能

代碼以下:spa

<?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));

效果如圖: 3d

好,咱們再考慮一個問題,剛剛咱們都在用數組的思惟進行解決問題,若是說,這個數組不想被循環,或者放棄數組的思路又該如何解決呢?code

很天然,咱們能夠想到依靠字符串。那麼字符串的函數也是很是多的,PHP在這方面的功勞是竭盡全力。blog

代碼以下:索引

<?php //第四種方式 字符串查找
function find_by_string($array,$find) { $string=implode($array); return strpos($string,$find.""); }

效果如圖:ip

針對本題而言,字符串查找是可行的,可是若是換一個場景,數組中出現了重複或者要查找的元素,不能出現完整匹配的狀況的時候,這個查找就是失敗的,請思考一下這是爲何。

相關文章
相關標籤/搜索