如何通过productId获取$_SESSION多维数组的对应数组键名?
如何通过productId获取$_SESSION购物车数组的键名?
嘿,我明白你遇到的问题了——你想用array_search找购物车里对应productId的数组键,但直接调用没生效,甚至连输出都没有。这是因为你的购物车数组是二维数组,而array_search默认只会在一维数组里匹配单个值,直接搜数字3的话,它找不到和子数组相等的元素,自然返回false,也就没输出了。
解决方案1:用array_column简化操作(PHP 5.5+适用)
array_column可以帮你把二维数组里的productId字段提取成一个一维数组,这样就能直接用array_search了:
// 从购物车数组中提取所有productId,生成一维数组 $productIds = array_column($_SESSION['cart'], 'productId'); // 搜索目标productId对应的键 $key = array_search(3, $productIds); // 输出结果(示例中会输出0) echo $key;
解决方案2:手动循环遍历(兼容低版本PHP)
如果你的PHP版本低于5.5,没法用array_column,那就手动遍历数组,逐个比对productId:
$targetProductId = 3; $resultKey = false; // 遍历购物车数组,记录每个元素的键和值 foreach ($_SESSION['cart'] as $index => $cartItem) { // 找到匹配的productId就记录键并退出循环 if ($cartItem['productId'] === $targetProductId) { $resultKey = $index; break; } } // 根据结果输出 if ($resultKey !== false) { echo $resultKey; } else { echo "未找到对应productId的商品"; }
为什么你的原代码不生效?
你之前写的$key = array_search(3,$_SESSION['cart']);,array_search会逐个检查$_SESSION['cart']里的每个元素(也就是那些子数组),看有没有和3完全相等的。但子数组是Array([productId] => 3, ...),和整数3类型、值都不匹配,所以返回false,echo $key就不会有任何输出啦。
内容的提问来源于stack exchange,提问作者john godstime
相关产品推荐
相关产品推荐

