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

发布于 2022-09-04 10:41:04 字数 122 浏览 16 评论 0

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(7

你另情深 2022-09-11 10:41:06

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

/(ㄒoㄒ)/~~

坐等更好的解决方案

活雷疯 2022-09-11 10:41:06

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

活泼老夫 2022-09-11 10:41:06
$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)){
    
}
月隐月明月朦胧 2022-09-11 10:41:06

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

枕头说它不想醒 2022-09-11 10:41:05
$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;
    }
九命猫 2022-09-11 10:41:05

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

in_array(VALUE, array_dot(ARRAY))
尘曦 2022-09-11 10:41:04

题主可以去看一下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';
};
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文