PHP在多维数组中选择键

时间:2012-07-25 08:00:11

标签: php multidimensional-array

我正在开发一个项目,我从数据库中选择多个项目(例如20个)并将它们存储在数组的缓存中。然后,当用户点击该项目时,我需要从数组中删除该项目。

而不是每次发生这种情况时删除缓存并重新触发查询(由同事建议)我想简单地从缓存中删除该项目,只在数量有限时重新触发查询缓存中的项目(比如5)

来自缓存的数组如下所示:

[
    [
      'item_id' => 10001,
      'item_name' => "super-cool item",
      'item_description' => "This item is awesome"
    ],
    [
      'item_id' => 10002,
      'item_name' => "super-cool item",
      'item_description' => "This item is awesome"
    ],
    [
      'item_id' => 10003,
      'item_name' => "super-cool item",
      'item_description' => "This item is awesome"
    ]
]

在选择三个项目并向用户显示之前,数组会被洗牌。

显然我需要做的是根据item_id选择一个项目,取消设置该项目的密钥并重置缓存中的字段。

绊倒我的部分是根据item_id选择项目,那么最有效的方法是什么?

2 个答案:

答案 0 :(得分:1)

要删除数组中的索引,请使用unset()函数。 因为您的值很少,所以您可以遍历数组并查找项ID的数组键:

<?php
$todeleteId=15;
foreach ($cache as $key=>$value) {
  if ($value['item_id']==$todeleteId) {
    unset($cache($key);
    break;
  }
}

您也可以将数组键设置为项ID,然后只需:

unset($todeleteId);

答案 1 :(得分:0)

几年有什么不同!如果其他人正在寻求解决类似问题的解决方案,处理它的最佳方法是这样的方法:

$toDelete = 1234;

$cache = array_filter($cache, function ($item) use ($toDelete) {
    return (int) $item['id'] !== $toDelete;
});