是否有 PHP 等同于 Python 的 Counter 对象?

Is there a PHP equvalent to Python's Counter object?

在 Python 中,存在一个 Counter class 允许我这样做:

counter = Counter()
counter[2] = 5
counter[3] = 2

for i in range(5):
    print(f'counter[{i}]={counter[i]}')

这将给我以下输出:

counter[0]=0
counter[1]=0
counter[2]=5
counter[3]=2
counter[4]=0

基本上它的作用就好像字典中任何没有显式初始化的元素的值为零,并且在访问不存在的元素时永远不会抛出异常。

在PHP中是否有类似的实体,或者是在循环访问时检查每个索引的唯一方法?

我正在寻找避免这样做的方法:

for ($i = 0; $i < numOfSomeResults; $i++) {
    if (isset($otherResult[$i]) {
        echo $otherResult[$i];
    } else {
        echo "0";
    }
}

然后做类似的事情:

for ($i = 0; $i < $numOfSomeResults; $i++) {
    echo $counter[i];
}

如果有帮助的话,我需要使用的索引和值都是整数。

试试这个:

在 'i' 前面加上 '$'。下面的代码必须有效

for ($i = 0; $i < numOfSomeResults; $i++) {
    if (isset($otherResult[$i]) {
        echo $otherResult[$i];
    } else {
        echo 0;
    }
}

无需重新发明轮子并继续 Alex 的评论,您可以使用空合并运算符 (PHP 7+)

for ($i = 0; $i < $numOfSomeResults; $i++) {
    echo $counter[$i] ?? 0;
}

关于它的作用的一些背景信息: Null Coalescing 运算符主要用于避免对象函数return NULL 值而不是return 默认优化值。它用于避免异常和编译器错误,因为它在执行时不会产生 E-Notice。

(Condition) ? (Statement1) ? (Statement2);

同样的语句可以写成:

if ( isset(Condition) ) {   
    return Statement1;
} else {
    return Statement2;
}