解决方案 »

  1.   

    $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');
      

  2.   

    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]);
      

  3.   

    谢谢!但是这还是直接遍历,刚刚试了下循环了1W次, 数组长度是224,查找的catid为176,速度为6.89s(左右,循环了几次,取了这个大概的中间值)。
    直接使用$v['catdir']==$catdir的话,速度为0.44(左右,同样拿了个大概的中间值)。有没有更高效的方法?尝试了下从头尾往中间开始遍历,相对来说对于查找较后面的,就比较快。有得有失。
      

  4.   

    徐老师抱歉我表达得不是很好,是通过catdir查找catid。array_filter()应该也是遍历数组吧。想试试有没有一个效率更高的方法。
      

  5.   

    内置函数怎么着也比你用代码拼凑的效率高
    就算你的表达有误,按查询键组织数据时,效率是最高的
    因为哈希表的时间复杂度为 O(0),而一次遍历的时间复杂度为 O(n)