zoukankan      html  css  js  c++  java
  • 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."");
    }

    效果如图:

    针对本题而言,字符串查找是可行的,但是如果换一个场景,数组中出现了重复或者要查找的元素,不能出现完整匹配的情况的时候,这个查找就是失败的,请思考一下这是为什么。

  • 相关阅读:
    数据--第53课
    数据--第52课
    数据--第51课
    标准模板库中的优先队列(priority_queue)
    进程的定义
    进程的基本概念
    循环不变式
    插入排序
    模板声明
    标准模板库中的队列(queue)
  • 原文地址:https://www.cnblogs.com/lizhaoyao/p/9078074.html
Copyright © 2011-2022 走看看