PHP如何通过会话数组检查元素是否存在

5

如何循环遍历session数组并检查$_session['items'][1][p_alt-variation-1]等是否存在?如果某个项目具有这些附加变量,则[p_alt-variation-{n}]元素是动态的,因此可能多于1个。

print_r($_session['items'])

Array
(
[0] => Array
    (
        [p_name] => Hovid PetSep
        [p_code] => 336910
        [p_coverImg] => 14-1460428610-ulNvG.jpg
        [p_id] => 14
        [p_price] => 24.50
        [p_qty] => 2
    )

[1] => Array
    (
        [p_name] => X-Dot Motorbike Helmet G88 + Bogo Visor (Tinted)
        [p_code] => 2102649
        [p_coverImg] => 12-1460446199-wI5qx.png
        [p_id] => 12
        [p_price] => 68.00
        [p_alt-variation-1] => Red
        [p_alt-variation-2] => L
        [p_qty] => 1
    )

)

我希望能够为用户展示购物车中某个项目是否有多种变体,如果存在的话,如何查找包含字符串[p_alt-variation-{n}]的数组元素?
我使用foreach($_SESSION['items'] as $cart_item){ ... }循环遍历所有购物车项目以显示项目信息。
谢谢建议。
2个回答

2

虽然我不是正则表达式专家,但你可以获取关键字并使用preg_grep进行检查。如果该关键字有多个密钥,则只需计算结果即可。

具体思路如下:

foreach($_SESSION['items'] as $cart_item) { // loop the items
    $keys = array_keys($cart_item); // get the keys of the current batch
    // make the expression
    $matches = preg_grep('~^p_alt\-variation\-\d+~i', $keys); // simply just checking the key name with has a number in the end, adjust to your liking
    if(count($matches) > 1) { // if it has more than one, or just change this to how many do you want
        echo 'has more than one variation';
    }
}

如果您想使用其中的一些键,只需使用在$matches中找到的结果。
if(count($matches) > 1) {
    foreach($matches as $matched_key) {
        echo $cart_item[$matched_key];
    }
}

谢谢...但是我有另一个问题,关于if(count($matches) > 1){ }之后,我想循环并输出$cart_item['p_alt-variation-{n}'],我该怎么做? - Lisa8
@Lisa8,你可以在$matches内部再次使用foreach - Kevin
非常感谢,真是太有用了! - Lisa8
@Lisa8,非常高兴这能帮到你。 - Kevin

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接