请教一下PHP怎样在二维数组查找匹配字符串元素效率比较高 数组查找二分查找 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 $arr=array( 2 => array( 'catid' => 2, 'catdir' => 'notice', ), 5 => array( 'catid' => 5, 'catdir' => 'subject', ), 6=> array( 'catid' => 6, 'catdir' => 'news' ));function findVal($arr,$dir){ foreach($arr as $key=>$val){ if(in_array($dir,$val)) return $key; }}echo findVal($arr,'subject'); php 提供有 array_filter 函数,为什么不用?$ar = array( 2 => array( 'catid' => 2, 'catdir' => 'notice', ), 5 => array( 'catid' => 5, 'catdir' => 'subject', ), 6=> array( 'catid' => 6, 'catdir' => 'news' ),);$catid = 5;$r = array_filter($ar, function($t) use ($catid) { return $t['catid'] == $catid; });print_r($r);Array( [5] => Array ( [catid] => 5 [catdir] => subject ))另外,对于你的数据组织方式,可以直接就访问到了 print_r($ar[$catid]); 谢谢!但是这还是直接遍历,刚刚试了下循环了1W次, 数组长度是224,查找的catid为176,速度为6.89s(左右,循环了几次,取了这个大概的中间值)。直接使用$v['catdir']==$catdir的话,速度为0.44(左右,同样拿了个大概的中间值)。有没有更高效的方法?尝试了下从头尾往中间开始遍历,相对来说对于查找较后面的,就比较快。有得有失。 徐老师抱歉我表达得不是很好,是通过catdir查找catid。array_filter()应该也是遍历数组吧。想试试有没有一个效率更高的方法。 内置函数怎么着也比你用代码拼凑的效率高就算你的表达有误,按查询键组织数据时,效率是最高的因为哈希表的时间复杂度为 O(0),而一次遍历的时间复杂度为 O(n) js 弹窗出现乱码了 请高手帮忙写个正则 为什么获取google网页内容和浏览的不一样? 关于提供接口给别人的问题? php数组转换,求解 准备扛着PHP搞电子政务了,大家给点意见 新手学习php,问题有好多,谢谢援助 使用PHP空间中遇到的一个问题 成功的思考,会得到快乐的安慰!!!!!谢谢大家帮助!!!! 如何突破google工具条的封锁 给安卓写的调用接口 如何保证安装性,防止攻击 php5.6.4不是有效的win32应用程序。
2 => array(
'catid' => 2,
'catdir' => 'notice',
),
5 => array(
'catid' => 5,
'catdir' => 'subject',
),
6=> array(
'catid' => 6,
'catdir' => 'news'
)
);
function findVal($arr,$dir){
foreach($arr as $key=>$val){
if(in_array($dir,$val))
return $key;
}
}
echo findVal($arr,'subject');
2 => array(
'catid' => 2,
'catdir' => 'notice',
),
5 => array(
'catid' => 5,
'catdir' => 'subject',
),
6=> array(
'catid' => 6,
'catdir' => 'news'
),
);$catid = 5;
$r = array_filter($ar, function($t) use ($catid) { return $t['catid'] == $catid; });
print_r($r);Array
(
[5] => Array
(
[catid] => 5
[catdir] => subject
))
另外,对于你的数据组织方式,可以直接就访问到了
print_r($ar[$catid]);
直接使用$v['catdir']==$catdir的话,速度为0.44(左右,同样拿了个大概的中间值)。有没有更高效的方法?尝试了下从头尾往中间开始遍历,相对来说对于查找较后面的,就比较快。有得有失。
就算你的表达有误,按查询键组织数据时,效率是最高的
因为哈希表的时间复杂度为 O(0),而一次遍历的时间复杂度为 O(n)