$ array [$ key] = $ something创建一个新数组

时间:2017-03-23 15:52:56

标签: php arrays

我有这个PHP代码,它应该检查单个项目在数组中的次数,并将该数量放在该键的值中。

我问,为什么$ duplicates [$ item] + = 1;创建一个新数组,而不是将其附加到现有数组

here是我得到的输出图片。

这是我的代码:

$itemQuery = $con->prepare("SELECT cart_value FROM active_carts WHERE username=:prodName");
$itemQuery->bindParam(":prodName" , $uname , PDO::PARAM_STR);
$itemQuery->execute();
$itemCount = $itemQuery->fetchAll();
$arrax = $itemCount[0]["cart_value"];
$itemArrX = explode(",", $arrax);
$inQuestion = array();
$duplicates = array();
foreach ($itemArrX as $item) {
    if (in_array($item , $inQuestion)) {
        $counter = 0;
        if (!array_key_exists($item , $duplicates)) {
            $duplicates[$item] = $counter; 
            // doesnt even execute
        } else {
            echo $duplicates[$item]; // echoes a new array every time
            $duplicates[$item] += 1;
        }
    } else {
        array_push($inQuestion, $item);
    }
}

2 个答案:

答案 0 :(得分:0)

这很简单,你从未在数组中创建过这个项目。

$data[$key] = $value; //examine that.

试试这个$duplicates[$item] = $item; 然后$duplicates[$item] += 1;

答案 1 :(得分:0)

如果您只是在寻找重复值的计数,我喜欢评论中有关array_count_values()的建议。可以通过array_filter()运行,以删除非重复值。

$itemQuery = $con->prepare("SELECT cart_value FROM active_carts WHERE username=:prodName");
$itemQuery->execute([":prodName"=>$uname]);
$itemArrX = explode(",", $itemQuery->fetchColumn(0));
$itemArrX = ["foo","bar","baz","bar","boo","baz"];
$duplicates = array_filter(array_count_values($itemArrX), function($v){return $v>1;});
$inQuestion = array_unique($itemArrX);
print_r($duplicates);
print_r($inQuestion);

或者这是代码的精简版,应该可以正常工作。

$itemQuery = $con->prepare("SELECT cart_value FROM active_carts WHERE username=:prodName");
$itemQuery->execute([":prodName"=>$uname]);
$itemArrX = explode(",", $itemQuery->fetchColumn(0));
$itemArrX = ["foo","bar","baz","bar","boo","baz"];
$duplicates = [];
$inQuestion = [];
foreach ($itemArrX as $item) {
    if (in_array($item, $inQuestion)) {
        echo $duplicates[$item];
        $duplicates[$item]++;
    } else {
        $duplicates[$item] = 1;
        $inQuestion[] = $item;
    }
}
print_r($duplicates);
print_r($inQuestion);