2012-07-25 113 views
1

我正在从项目中选择数据库中的多个项目(比如说20),并将它们存储在数组中的缓存中。然后,当用户单击该项目时,我需要从该阵列中删除该项目。PHP在多维数组中选择键

而不是删除缓存并在每次发生这种情况时重新触发查询(这是由同事建议的)我只想从缓存中删除项目,并且只在有限的情况下重新激发查询(比方说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选择项目,那么做这件事最有效的方法是什么?

+0

为什么不直接使用的itemid为数组中的关键,当你从取db,那么你可以'unset($ arr [$ item_id]);' – Crisp 2012-07-25 08:03:29

+0

我不是100%确定我明白你需要什么,但这听起来有点像JQuery和AJAX的工作。编辑:忽略。 – Pete 2012-07-25 08:04:39

回答

0

几年来有什么不同!柜面其他人正在寻求解决类似的问题,这一点,对付它最好的办法是这样的方法:

$toDelete = 1234; 

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

为了删除数组中的索引,可以使用unset()函数。 因为你有,你可以只通过数组循环,并寻找适合的项目ID数组键这么几个值:

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

你也可以只设置数组键的项目编号,然后只是:

unset($todeleteId); 
+0

我已经考虑了这两个选项,但是网站获得了大量的流量,所以foreach()方法被谨慎使用,除了shuffle重置数组键之外,其他选项都可以。 – 2012-07-25 08:34:20

+1

@AndrewWillis如果你必须避免循环,你在编写代码时必须非常受限制。为什么不通过让JavaScript处理你的数组来处理浏览器? – Pete 2012-07-25 08:41:25

+0

不要这么快放弃foreach解决方案!当只有前三个项目显示给用户时,foreach循环最多可以运行3次,然后才能达到想要的位置。 – KTB 2012-07-25 08:42:06