【问题标题】:Check if value is in array using 2 specific keys使用 2 个特定键检查值是否在数组中
【发布时间】:2022-01-07 10:28:13
【问题描述】:

我有一个这样的数组:

$arr = ({
    "ID":"10",
    "date":"04\/22\/20"
},
{
    "ID":"20",
    "date":"05\/25\/20"
},
{
    "ID":"32",
    "date":"07\/13\/20"
});

我想知道数组中是否存在 2 个不同键的值,我该如何实现?

示例:如果 id 等于 32 并且 date 等于 07/13/20,则返回 true。

我试过in_array($monthName, array_column($GLOBALS['group_posts_array'], 'month')); 但这只能在一个键上工作。我想一次实现键,有点像 if 语句中的&&

【问题讨论】:

  • 您好,尽量不要使用超级作用域 $GLOBALS,如果您的情况允许,最好使用 $_POST。

标签: php arrays


【解决方案1】:

我不认为问题中的$arr 是一个有效的php 数组,但如果它应该是一个多维数组,您也可以将一个数组传递给in_array,其中包含您正在查找的键和值为:

$arr = [
    [
        "ID" => "10",
        "date" => "04\/22\/20"
    ],
    [
        "ID" => "20",
        "date" => "05\/25\/20"
    ],
    [
        "ID" => "32",
        "date" => "07\/13\/20"
    ]
];

$values = [
    "ID" => "32",
    "date" => "07\/13\/20"
];

var_dump(in_array($values, $arr, true));

$values["ID"] = "33";

var_dump(in_array($values, $arr, true));

输出

bool(true)
bool(false)

【讨论】:

    【解决方案2】:

    你可以实现一个'some'函数。

    function some(array $arr, callable $fn):bool{
        foreach($arr as $index=>$item){
            if($fn($item, $index)){
                return true;
            }
        }
        return false;
    }
    

    用法如下:

    $id = 32;
    $date = "07/13/20";
    $isInArray = some($arr, function($item, $index) use ($id, $date){
        return $item->id == $id && $item->date == $date;
    })
    

    【讨论】:

    • 我假设他正在处理一个对象,因为他使用的是 JSON sintax,并且带有命名键的 JSON 数组通常会转换为对象。但你肯定是对的;谢谢指出!
    猜你喜欢
    • 2011-05-29
    • 2018-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-27
    • 1970-01-01
    • 2012-11-16
    • 2011-10-22
    相关资源
    最近更新 更多