【问题标题】:How can I find values in an array which match criteria, without using a for loop?如何在不使用 for 循环的情况下在数组中找到符合条件的值?
【发布时间】:2017-08-21 01:26:44
【问题描述】:

我有一个这样的数组

$a = [
    [
        "id"     => "1",
        "values"   => [
            "1",
            "2"
        ]
    ],
    [
        "id"     => "2",
        "values"   => [
            "1",
            "3"
        ]
    ],
    [
        "id"     => "3",
        "values"   => [
            "2",
            "4"
        ]
    ],
    [
        "id"     => "4",
        "values"   => [
            "4",
            "6"
        ]
    ],
];

搜索并返回 'values' 有 2 个的数组

$result = [
    [
        "id"     => "1",
        "values"   => [
            "1",
            "2"
        ]
    ],
    [
        "id"     => "3",
        "values"   => [
            "2",
            "4"
        ]
    ],
];

是的,我可以使用 for 循环,并使用 in_array 返回结果,只是想是否有优雅(更好)的方法来做到这一点?

$result = [];
foreach ($a as $datum) {
    if (in_array('2', $datum['values'])) {
        $result[] = $datum;
    }
}

我试过array_search,但它不支持嵌套数组

array_search('2', array_column($a, 'values'));

【问题讨论】:

  • 哦,是的,有什么方法可以忽略使用 in_array 进行检查吗? array_filter($data, function($datum) { if (in_array('2', $datum['values'])) { return $datum; } });
  • 应该是这样的:array_filter($data, function($datum) { return in_array('2', $datum['values']); });

标签: php arrays filtering


【解决方案1】:

您可以使用array_filter()in_array()

$value = '2';

$result = array_filter($a, function (array $element) use ($value) {
    return array_key_exists('values', $element) 
        && is_array($element['values']) 
        && in_array($value, $element['values'], true);
});

var_dump($result);

参考见:

例如,请参阅:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-02-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-26
    相关资源
    最近更新 更多