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


 群里有人問,有個數組五個元素 分為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($array);
    return strpos($string,$find."");
}

效果如圖:

針對本題而言,字符串查找是可行的,但是如果換一個場景,數組中出現了重復或者要查找的元素,不能出現完整匹配的情況的時候,這個查找就是失敗的,請思考一下這是為什么。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM