1

我正在做一个项目,我从数据库中选择多个项目(比如 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,那么最有效的方法是什么?

4

2 回答 2

1

为了删除数组中的索引,您可以使用该unset()函数。因为你的值太少了,所以你可以遍历数组并查找数组键以获取项目 id:

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

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

unset($todeleteId);
于 2012-07-25T08:08:15.203 回答
0

几年有多大的不同!万一其他人正在寻求解决与此类似的问题,处理它的最佳方法是这样的方法:

$toDelete = 1234;

$cache = array_filter($cache, function ($item) use ($toDelete) {
    return (int) $item['id'] !== $toDelete;
});
于 2015-04-24T14:05:13.573 回答