PHP:在二维数组中搜索,但只查看特定键

时间:2015-11-05 15:40:23

标签: php arrays

我想搜索二维数组,但我只想搜索第二维中的特定字段。如果找到,我想退回密钥。不需要从那里继续,我只需要第一次出现,但我不介意也能完全出现。

数组可能如下所示:

$array = [
    0 => ['value' => 'x', 'foo' => 'bar'],
    1 => ['value' => 'y', 'foo' => 'bar'],
    2 => ['value' => 'z', 'foo' => 'x'],
];

现在我的第一个想法是这样的:

function myCustomArraySearch($array, $searchkey, $searchvalue) {
    foreach ($array as $key => $value) {
        if ($value[$searchkey] == $searchvalue) {
            return $key;
        }
    }
    return false;
}

echo myCustomArraySearch($array, 'value', 'x');

我敢肯定,有一个更加优雅的解决方案。有什么想法吗?

3 个答案:

答案 0 :(得分:4)

这是一种返回单个键的方法:

$result = array_search('x', array_column($array, 'value'));

这将返回多个键:

$result = array_keys(array_column($array, 'value'), 'x');

如果array_column()不需要PHP> = 5.5.0,请在其中使用:

array_map(function($v) { return $v['value']; }, $array)

答案 1 :(得分:2)

以下函数返回第一次出现的位置:

1 - 使用foreach次迭代和array_serach

function search1($array, $key, $value) {
    foreach ($array as $k => $arr) {
        if (array_search($value, $arr) != false) {
            return $k;
        }
    }
    return false;
}

2 - 使用array_maparray_key_existsarray_search

function search2($array, $key, $value) {
    $mapped = array_map(function($arr) use ($key, $value) {
        return (array_key_exists($key, $arr) && $arr[$key] == $value)
               ? true
               : false;
    },
    $array);    

    return array_search(true, $mapped);
}

答案 2 :(得分:2)

您的代码工作正常,因此此代码只需更少的代码。仅适用于PHP 5.5 +。

function myCustomArraySearch($array, $searchkey, $searchvalue) {
    $cols   = array_column($array, $searchkey);
    $result = array_search($searchvalue, $cols);
    return $result;
}

当然,如果你想返回它找到的数组,而不仅仅是索引,你就会这样返回:

function myCustomArraySearch($array, $searchkey, $searchvalue) {
    $cols   = array_column($array, $searchkey);
    $result = array_search($searchvalue, $cols);
    return $array[$result];
}