我想知道如何从多维数组中找到数组键。
我有这个:
$_SESSION['shop'] = array();
//Now I insert some values
$_SESSION['shop'][] = array("idproduct", "amount");
我想,如果我将产品插入具有相同idproduct的数组,则覆盖" amount",而不是向主数组添加新值。
我尝试使用foreach
中的$_SESSION
进行循环并执行array_search
,但不知道这是否是最佳方式,唯一一个...
提前致谢。
答案 0 :(得分:1)
如果您想快速访问商店阵列中现有的条目,并且不应该有两个具有相同idproduct
条目的条目,您可以只使用产品ID作为密钥你的阵列。然后使用array_key_exists
检查条目是否已设置:
给出示例,假设您在$idProduct
中存储了产品ID:
if(array_key_exists($idProduct,$_SESSION['shop'])) {
$_SESSION['shop'][$idProduct][amount]++;
}
else {
$_SESSION['shop'][$idProduct] = array("idproduct" => $idProduct, "amount" => 0);
}
答案 1 :(得分:1)
如果你使用它们通常是如何构建的集合,那么一组关联数组或对象(DEMO):
$products = array(
array('idproduct' => 1, 'amount' => 5),
array('idproduct' => 2, 'amount' => 10),
array('idproduct' => 3, 'amount' => 11),
array('idproduct' => 4, 'amount' => 5)
);
你可以构建一个小函数,它合并一个已经存在的项目,或者如果不存在则添加它:
function addOrOverride(&$arr, $newItem) {
$filtered = array_filter($arr, function($item) use($newItem) {
return $item['idproduct'] == $newItem['idproduct'];
});
if(count($filtered) > 0) {
$key = key($filtered);
$arr[$key] = array_merge($arr[$key], $newItem);
} else {
$arr[] = $newItem;
}
}
并使用您的新数据或现有数据调用它:
addOrOverride($products, array('idproduct' => 4, 'amount' => 6));
您的$products
数组如下所示:
array(4) {
[0]=> array(2) {["idproduct"]=> int(1) ["amount"]=> int(5)}
[1]=> array(2) {["idproduct"]=> int(2) ["amount"]=> int(10)}
[2]=> array(2) {["idproduct"]=> int(3) ["amount"]=> int(11)}
[3]=> array(2) {["idproduct"]=> int(4) ["amount"]=> int(6)}
}
这顺便使用了一个php 5.3匿名函数,所以请考虑这里的php版本。