【问题标题】:How to optimize the search in an multidimensional array in PHP?如何在 PHP 中优化多维数组中的搜索?
【发布时间】:2018-01-05 21:20:26
【问题描述】:

样本数组:

$team = array(
    array(
        "cid" => 123,
        "pid" => 000,
        .
        .
    ),
    array(
        "cid" => "666",
        "pid" => "000",
        .
        .
    ),
    array(
        "cid" => "777",
        "pid" => "123",
        .
        .
    ),
    array(
        "cid" => "888",
        "pid" => "123",
        .
        .
    ),
    array(
        "cid" => "999",
        "pid" => "777",
        . 
        .
    ),
    .
    .
);

我有一个包含 10 万条数据的类似数组。当我使用 foreach 或 for 循环搜索数据时,会花费大量时间。有没有更好的办法?

假设我想找出 pid = 123 的所有 cid。

【问题讨论】:

  • 能不能把[ pid => [ cid1, cid2, cid3 ] ]用pid作为key访问?
  • 我不会将此作为答案发布,因为我不确定它是否更快,但您可以使用$cids = array_column($array, 'pid'); 从每个内部数组中提取列pid,同时保留索引。然后你可以搜索它。搜索会更快,但array_column 也需要一些时间。
  • 您是否在每个请求上生成整个数组?这似乎是属于数据库的数据,因此您只需要加载所需的数据并轻松搜索即可
  • 对我来说似乎是最简单的(并且可能是最有效的方法是限制获取的记录数量(通过 SQL 查询或 API 调用)。处理这么大数组几乎总是会导致问题。
  • @rypskar 不是每个请求。我实际上将一些数据从数据库中检索到数组中,然后对其执行了一些操作,甚至添加了几列,然后我正在搜索数据。以便我可以执行其他操作。必须对每个 'pid' 执行搜索。

标签: php arrays search optimization multidimensional-array


【解决方案1】:

array_columnarray_search 如果您只想要一个结果:

$key = array_search(123, array_column($array, 'pid '));

【讨论】:

猜你喜欢
  • 2022-08-11
  • 2016-09-19
  • 2017-03-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-30
  • 2022-11-29
  • 2011-05-22
相关资源
最近更新 更多