如何在 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 键为零时,它不会响应。
另请注意,如果有需要,您现在可以轻松添加更多列,而无需添加更多重复代码行。
我有一个包含以下内容的 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 键为零时,它不会响应。
另请注意,如果有需要,您现在可以轻松添加更多列,而无需添加更多重复代码行。