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"
    ]
]

3つの項目が選択されてユーザーに表示される前に、配列がシャッフルされます。

明らかに、私がする必要があるのは、に基づいてアイテムを選択し、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 に答える