0

我有一个包含以下内容的 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')
4

1 回答 1

1

目前,您首先在“id”列中搜索,然后在“name”列中搜索,最后在“symbol”列中搜索。如果在任何阶段遇到匹配项,则返回数组键。如果要保留此功能,则必须按该顺序查看列。

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

为什么不重构你的代码呢?例如像这样:

$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()返回false,与您所做的不同,当此函数返回键零时,它不会响应。

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

于 2021-09-05T08:35:04.057 回答