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

Php $array[$key]=$something创建一个新数组,php,arrays,Php,Arrays,我有一段php代码,它应该检查数组中单个项的次数,并将数量放入该键的值中 我在问,为什么$duplicates[$item]+=1;创建新数组,而不是将其附加到现有数组 是我得到的输出的图片 这是我的代码: $itemQuery = $con->prepare("SELECT cart_value FROM active_carts WHERE username=:prodName"); $itemQuery->bindParam(":prodName" , $uname , PDO

我有一段php代码,它应该检查数组中单个项的次数,并将数量放入该键的值中

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

是我得到的输出的图片

这是我的代码:

$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);
    }
}

很简单,您从未在数组中创建该项

$data[$key] = $value; //examine that.
试试这个
$duplicates[$item]=$item

然后
$duplicates[$item]+=1

如果您只是查找重复值的计数,我喜欢注释中关于
数组计数值()的建议。可以通过
array\u 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);

你到底在问什么?更新了问题@caspaincaldionth你的问题中仍然没有问题。是的,这是一个陈述,所以你想要数组\u计数\u值;)看看例子:$duplicates[$item]+=1;将始终创建一个新阵列!如果(!array_key_存在($item,$duplicates)){$duplicates[$item]=$counter;}否则{$duplicates[$item]=$item;$duplicates,则不创建一个
[$item]+=1;var_dump($duplicates);}
aw会吗?那我该怎么办?@caspain$duplicates[$item]=$counter;不会执行,你知道为什么吗?