怎么判断一个值是否存在于一个多维关联数组?

in_array();
这个已经尝试过在一维关联数组中可以,多维就行不通了。
deep_in_array();
这个PHP社区的方法,只试用多维数值数组,多维关联数组就行不通了,还有什么方法吗?
阅读 6.7k
7 个回答

题主可以去看一下v-collect扩展;

https://github.com/VikinDev/v-collect


案例1;

$collect = vcollect([
    ['id'=>1,'product'=>['name'=>'lili','sku'=>15]],
    ['id'=>2,'product'=>['name'=>'bibi','sku'=>10]],
]);

if($collect->where('id', 1)->toArray() == NULL) {
    echo 'Not in the array';
} else {
    echo 'In the array';
};

案例2;

$collect = vcollect([
    ['id'=>1,'product'=>['name'=>['v'=>'i'],'sku'=>15]],
    ['id'=>2,'product'=>['name'=>'bibi','sku'=>10]],
]);

if($collect->where('product.name', 'aa')->toArray() == NULL) {
    echo 'Not in the array';
} else {
    echo 'In the array';
};
$arr= [
     [
         "id"   => 1,
         "type" => 1
     ],
     [
         "id"   => 2,
         "type" => 2
     ],
     [
         "id"   => 3,
         "type" => 3
     ],
     [
         "id"   => 4,
         "type" => 4
     ]
 ];
var_dump(in_array_recursive(2,$arr));//true
var_dump(in_array_recursive(5,$arr));//false

function in_array_recursive($needle, $haystack) { 
    $it = new RecursiveIteratorIterator(new RecursiveArrayIterator($haystack)); 
    foreach($it as $element) { 
        if($element == $needle) { 
            return true; 
        } 
    } 
    return false; 
} 

根据@mylxsw 提示 laravel array_dot

var_dump(in_array(2,array_dot($arr)));//true
var_dump(in_array(5,array_dot($arr)));//false
function array_dot($array, $prepend = '')
    {
        $results = [];

        foreach ($array as $key => $value) {
            if (is_array($value)) {
                $results = array_merge($results, array_dot($value, $prepend.$key.'.'));
            } else {
                $results[$prepend.$key] = $value;
            }
        }

        return $results;
    }

在Laravel中有一个array_dot函数,可以实现多维->一维,然后对其使用in_array判断即可。大致是这样的

in_array(VALUE, array_dot(ARRAY))

多维关联数组降维->循环

/(ㄒoㄒ)/~~

坐等更好的解决方案

foreach 循环判断存不存在,直接判断好像是没有方法的

$data=[
    
    ['type'=>1,'per'=>3],
    ['type'=>2,'per'=>5],
    ['type'=>1,'per'=>4],
    
];

$type=2;

$arr=array_column($data, 'type');

if (in_array($type, $arr)){
    
}

多维不都是用递归去判断的吗?

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题