$a = array(
    'k1' => array('aa' => 'v1','bb' => 10),
    'k2' => array('aa' => 'v2', 'bb' => 20),
    'k3' => array('aa' => 'v3', 'bb' => 30),
    'k4' => array('aa' => 'v4','bb' => 30 ),
)
        
  $b='v3';php 有没有系统函数可以直接得到结果的  
        
根据  "v3" 或 'aa' => 'v3' 返回 "k3"

解决方案 »

  1.   

    就一次遍历,有还神马高不高性能的foreach($a as $k=>$row) {
        if(in_array($b, $row)) {
             return $k;
        } 
    }
      

  2.   


    $a = array(
        'k1' => array('aa' => 'v1','bb' => 10),
        'k2' => array('aa' => 'v2', 'bb' => 20),
        'k3' => array('aa' => 'v3', 'bb' => 30),
        'k4' => array('aa' => 'v4','bb' => 30 ));
        $b='v1';
    function find($a,$b){
    $flag=0;
    foreach($a as $key=>$value){
    if(is_array($value)){
    foreach($value as $key1=>$value1){
    if($value1==$b){
    $flag=1;
    break;
    }
    }
    }
    }
    if($flag){
    return $a[$key{0}.$b{1}];
    }else{
    return "not found!";
    }
    }
    echo "<pre>";
    print_r(find($a,$b));
    echo "</pre>";
      

  3.   

    $a = array(
        'k1' => array('aa' => 'v1','bb' => 10),
        'k2' => array('aa' => 'v2', 'bb' => 20),
        'k3' => array('aa' => 'v3', 'bb' => 30),
        'k4' => array('aa' => 'v4','bb' => 30 ),
    );
    $b = 'v3';$c = array_filter($a, function($r) use($b) { return in_array($b, $r);});
    //php < 5.3
    $c = array_filter($a, create_function('$r', "return in_array('$b', \$r);"));echo key($c);
      

  4.   

    将数组改装一下
    foreach($a as $k=>$v) $ar[$v['aa']]=$k;
    echo $ar[$b];
    或者用 #3 的直接遍历也可以
      

  5.   

    恕我驽钝,$ar是什么
    ------------------------------------------------------AutoCSDN签名档------------------------------------------------------
      

  6.   

    谢谢,原来简化生成了一个数组
    ------------------------------------------------------AutoCSDN签名档------------------------------------------------------