如何在 Json 文件数组中搜索多列?

How To Search In Multiple Columns In Json File Array?

我有一个包含以下内容的 json 文件:

[
    {
    "id": "apple",
    "symbol": "app",
    "name": "Apple",
    },
]

我想在这个 Json 文件中搜索 id 或 symbol 或 name 列, 我写这段代码:

    $nameOrIDOrSymbol="apple"; // user types id or symbol or name.
    $names= json_decode(file_get_contents("file.json", true), true);
    $name_key1 = array_search($nameOrIDOrSymbol,array_column($names, 'id')
    $name_key2 = array_search($nameOrIDOrSymbol,array_column($names, 'name');
    $name_key3 = array_search($nameOrIDOrSymbol,array_column($names, 'symbol');
if($name_key1){
    var_dump($name_key1);
}elseif($name_key2){
    var_dump($name_key2);
}elseif($name_key3){
    var_dump($name_key3);
}

如何使用 array_search 或其他函数仅在这三个 3 数组列中搜索一次?例如这样搜索:

$name_key = array_search($nameOrIDOrSymbol,array_column($names, 'id','name','symbol')

目前您首先在 'id' 列中搜索,然后在 'name' 列中搜索,最后在 'symbol' 列中搜索。如果,在任何阶段,你遇到匹配你 return 数组键。如果您想保留此功能,则必须按该顺序浏览各列。

您可以将三列组合成一个数组,稍微调整一下键,然后那样进行一次搜索,但我认为这不是很有效。

为什么不稍微重组一下代码?比如像这样:

$query   = 'apple';
$columns = ['id', 'name', 'symbol'];
$data    = json_decode(file_get_contents('file.json', true), true);
foreach ($columns as $column) {
    $key = array_search($query, array_column($data, $column);
    if ($key !== false) break;
}
var_dump($key);

从某种意义上说,现在您只使用了 array_search() 一次。

此代码比您的代码更有效,因为它在列中找到 'apple' 后立即停止搜索。您的代码始终搜索所有列。

请注意,我实际上检查了 array_search() returns false,与您所做的不同,当此功能 returned 键为零时,它不会响应。

另请注意,如果有需要,您现在可以轻松添加更多列,而无需添加更多重复代码行。