【问题标题】:How To Search In Multiple Columns In Json File Array?如何在 Json 文件数组的多列中进行搜索?
【发布时间】:2021-11-02 18:48:09
【问题描述】:

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

【问题讨论】:

  • 您到底想得到什么?包含值为 ex 的键的对象。 apple?或者只是在包含该对象的数组中索引?
  • 另一个人回答了,谢谢

标签: php arrays json multidimensional-array array-column


【解决方案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,这与您所做的不同,当此函数返回键零时它不会响应。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-09-02
    • 1970-01-01
    • 2023-02-02
    • 1970-01-01
    • 2015-01-22
    • 2020-02-01
    • 1970-01-01
    相关资源
    最近更新 更多