群里有人问,有个数组五个元素 分为1到5 现在要求 循环找出3元素的索引,怎么做性能才是最高。
我不知道哪个性能最高,但是我想提出可以用多种方式进行查找,然后进行比较选择。
我想,最简单最基础的 应该是循环,循环到它,那就是它。当然也可以用PHP提供的数组查找 array_search。这都是能想得到的,那么我想说的是,剑走偏锋,老铁是否尝试过 键值反转进行查找呢?
array_flip键值反转,能够将你需要的键变值,值变键,然后取数组下标,即可得到这个位置。
代码如下:
$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在这方面的功劳是不遗余力。
代码如下:
//第四种方式 字符串查找
function find_by_string($array,$find)
{
$string=implode($array);
return strpos($string,$find."");
}
效果如图:
针对本题而言,字符串查找是可行的,但是如果换一个场景,数组中出现了重复或者要查找的元素,不能出现完整匹配的情况的时候,这个查找就是失败的,请思考一下这是为什么。
学underscore在数组中查找指定元素
前言 在开发中,我们经常会遇到在数组中查找指定元素的需求,可能大家觉得这个需求过于简单,然而如何优雅的去实现一个 findIndex 和 findLastIndex.indexOf 和 lastInd ...
Java-Runoob-高级教程-实例-数组:14. Java 实例 – 在数组中查找指定元素
ylbtech-Java-Runoob-高级教程-实例-数组:14. Java 实例 – 在数组中查找指定元素 1.返回顶部 1. Java 实例 - 在数组中查找指定元素 Java 实例 以下实例 ...
ES6数组中删除指定元素
知识点: ES6从数组中删除指定元素 findIndex()方法返回数组中满足提供的测试函数的第一个元素的索引.否则返回-1. arr.splice(arr.findIndex(item => ...
交换数组中两个元素的位置,元素包括key和value 一维数组
/*author: yangyu@sina.cndescription: 交换数组中两个元素的位置,元素包括key和value,具体用法见下面的例子*/$arr = array(11=>'a', ...
【跟着子迟品 underscore】如何优雅地写一个『在数组中寻找指定元素』的方法
Why underscore (觉得这部分眼熟的可以直接跳到下一段了...) 最近开始看 underscore.js 源码,并将 underscore.js 源码解读 放在了我的 2016 计划中. ...
C# 移除string[] 数组中的指定元素
本文转载自 http://www.cnblogs.com/jcdd-4041/p/3279531.html 第一步:先把string[] 转换成 ArrayList 第二步:移除指定元素 第三步 ...
jq从数组中删除指定元素(根据自定义条件) 超好用的 $.grep() 方法
转: jQuery.grep() 什么是jQuery.grep()? jQuery.grep()是一个查找满足过滤函数的数组元素的函数.原始数组不受影响,返回值为数组. 用法介绍: 写法: jQuer ...
PHP 从数组中删除指定元素
随机推荐
JEECG开源团队招募新成员 2014年
JEECG开源团队招募新成员 2014年 截止日期:2014-06-01 JEECG开源项目 是一款基于代码生成器的微云高速开发平台.提供企业高速开发和採用微信实现移动应用的解决方式.J ...
几分钟看完 flow.ci 全部功能
从 0 到 1,从邀请式内测到收费上线,flow.ci 经历了十个多月的沉淀与打磨.这期间,flow.ci 工程师们奋力赶工,进行了一系列的大功能更新,Bug 修复,功能优化. 这篇文章记录了 flo ...
js全选checkbox框
html:
Oracle AWRSQRPT报告生成和性能分析
我写的SQL调优专栏:https://blog.csdn.net/u014427391/article/category/8679315 对于局部的,比如某个页面列表sql,我们可以使用Oracle的 ...
PHP面向对象和面向过程
编程界不论是PHP.Python都有这么两种编程思想,oop面向对象.pop面向过程,这两种在功能上没有多大区别,但是在代码编写上却有很大区别.今天就记录一下面向对象和面向过程的优点.缺点.定义.实现 ...
GMA Round 1 函数求值
传送门 函数求值 设函数$f(x)=x^{2018}+a_{2017}*x^{2017}+a_{2016}*x^{2016}+...+a_{2}*x^2+a_{1}*x+a_{0}$,其中$a_{0} ...
python之运算符与基本数据类型
1.开发工具:IDE pycharm(推荐).eclipse 2.运算符 结果是值 算数运算 a = 10 * 10 赋值运算 a = a + 1 a+=1 结果是布尔值 比较运算 a = 1 ...
MDP安装之数据库
/usr/bin/mysqladmin -u root password 'Bic2017' mysql-community-client-5.6.28-2.el6.x86_64 mysql-comm ...
Java学习笔记二十九:一个Java面向对象的小练习
一个Java面向对象的小练习 一:项目需求与解决思路: 学习了这么长时间的面向对象,我们只是对面向对象有了一个简单的认识,我们现在来做一个小练习,这个例子可以使大家更好的掌握面向对象的特性: 1.人类 ...
VIM选项配置说明
选项配置说明 选项书写格式 选项说明 :se[t] 显示所有被改动的选项 :se[t] all 显示所有非 termcap 选项 :se[t] termcap 显示所有 termcap 选项 :se[ ...