php 二维数组查找数组下标

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了php 二维数组查找数组下标相关的知识,希望对你有一定的参考价值。

比如这么一个数组:
Array
(
[0] => Array
(
[id] => 1
[metal] => 19
[wood] => 6
[fire] => 40
[water] => 40
[earth] => 40
[uid] => 1
)

[1] => Array
(
[id] => 2
[metal] => 52
[wood] => 58
[fire] => 40
[water] => 40
[earth] => 40
[uid] => 2
)

[2] => Array
(
[id] => 3
[metal] => 57
[wood] => 44
[fire] => 40
[water] => 40
[earth] => 42
[uid] => 3
)

[3] => Array
(
[id] => 4
[metal] => 40
[wood] => 43
[fire] => 40
[water] => 40
[earth] => 41
[uid] => 4
)

[4] => Array
(
[id] => 5
[metal] => 40
[wood] => 40
[fire] => 40
[water] => 40
[earth] => 40
[uid] => 5
)

);

我想要同过可以获取的uid的值,比如是2。从而获得其在这整个大数组中得下标[1]。

这个逻辑应该如何实现呢,本人是菜鸟,万分感激,在线等!!!!!!!!!!!!!!!!!!!!!!!!!

参考技术A 很简单,遍历一遍数组就可以了
foreach($arr as $k=>$v)
if($v['uid']==2)
return $k;




这个$k就是本回答被提问者采纳
参考技术B function findKeyByUid($a, $uid)
    foreach($a as $k=>$v)
        if($v['uid'])===$uid)
              return $key;
        
        return false;

$a=原数组
$k=findKeyByUid($a, 2);//找uid为2的键

数据大了改用二分法更快点...

追问

二分法该怎么办呢?求教求教

剑指Offer学习面试题:二维数组中的查找PHP实现

最近一直看剑指Offer、里面很多算法题。于是就想着用PHP来显示一下。

题目:

在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。

请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。

拿到这个题目。我们第一个反应,就是遍历二维数组。然后逐个进行比较。我们不难用PHP进行实现。于是有了下面的代码

 1 function TwoArrayFind($array,$search) {
 2     $found = false;
 3 
 4     if(empty($array) || !is_array($array) || empty($search)) {
 5         return $found;
 6     }
 7 
 8     $rows = count($array); //行数
 9     $cols = count($array[0]); //列数
10 
11     for ($i=0; $i < $rows ; $i++) { 
12         for ($j=0; $j < $cols ; $j++) { 
13             if($array[$i][$j] == $search) {
14                 $found = true;
15                 break 2;//跳出两层循环
16             }
17         }
18     }
19     return $found;
20 }

但是这个算法的实现的复杂度是O(n^2),于是我们可以通过其他的方法。来简化。

二维数组的构造就是类似下图。

技术分享图片

我们选择一个参考点,来逐次减少查询的行数和列数。

观察发现。每行都是从左到右递增,从上往下递增。

技术分享图片

 

假设我们要查找13.我们选择右上角的5作为参考点。要查询的数字大于5.可以把当前行,全部排除

我们如果查询是3.选择5作为参考点,3小于5,可以排除5所在的列。一次就踢掉了很多的元素。

 技术分享图片

通过每次这样的判断。我们减少了很多数字的比较。PHP代码实现如下

 1 function TwoArrayFind($array,$search)
 2 {
 3     $found = false;
 4 
 5     if(empty($array) || !is_array($array) || empty($search)) {
 6         return $found;
 7     }
 8 
 9     $rows = count($array);//行数
10     $cols = count($array[0]);//列数
11 
12     $row = 0;//行标识
13     $col = $cols-1; //列标识 末端列
14 
15     while($row < $rows && $col >= 0 ) {
16 
17         if($array[$row][$col] == $search) {
18             $found = true;
19             break;
20         }
21     //右上角元素大于要查询的 减少列
22         if($array[$row][$col] > $search) {
23             --$col;
24         }else if($array[$row][$col] < $search){
25             ++$row;
26         }
27     }
28 
29     return $found;
30 
31 }

 

通过这个题目,我们可以想到,当我们在查找一个数的时候,可以逐渐减少查询的区间。来加快查询。

 

以上是关于php 二维数组查找数组下标的主要内容,如果未能解决你的问题,请参考以下文章

PHP 想从1组二维数组里取1个下标的值去其他数组查询另1个下标的值,然后用查询出来值替换原来二维数组里的

求问一道c语言编程题,在二维数组中进行查找 输出下标

php显示判断数组是不是带下标的二维数组

二维数组中的查找

php 二维数组过滤相同的值

offer 二维数组查找