php 将空值赋给数组元素仍被视为有效的数组元素

lhcgjxsq  于 2022-11-21  发布在  PHP
关注(0)|答案(2)|浏览(157)

为什么返回的计数仍然是3?

$arr =
[
    [
        'slug' => 'products-services-pricing',
        'text' => 'Products/Services and Pricing',
    ],
    [
        'slug' => 'promotions-plan',
        'text' => 'Promotions Plan',
    ],
    (1 == 2) ?
    [
        'slug' => 'distribution-plan',
        'text' => 'Distribution Plan',
    ] : null,
];

echo "Count = ".count($arr)."\n";
print_r($arr);

我的foreach被搞砸了。PHP 8.0
我无法在foreach中执行条件检查,因为我正在使用count

uxhixvfz

uxhixvfz1#

当然,null值元素仍被视为有效的数组元素!

例如:

<?php
$arr = [null, null, null];

echo 'Count: ' . count($arr); //Will print 3

在你的代码中,第三个元素的值是null,这没有问题,也没有什么问题。你不是在删除这个元素,而是给它赋值:null .
这里你有一个想法:遍历数组并删除值为null的元素:

$aux = [];
foreach ($arr as $item) {
    if (!is_null($item)) {
        $aux[] = $item;
    }
}
$arr = $aux; //Now $arr has no null elements

或者简单地迭代计数非空元素。

$c = 0;
foreach ($arr as $item) {
    if (!is_null($item)) {
        $c++;
    }
}
echo 'Count: ' . $c; //Count without null elements

或者你也可以在数组中添加或不添加条件元素,这可能是更好的解决方案:

$arr =
[
    [
        'slug' => 'products-services-pricing',
        'text' => 'Products/Services and Pricing',
    ],
    [
        'slug' => 'promotions-plan',
        'text' => 'Promotions Plan',
    ],
];

if (1 == 2) {
    $arr[] = [
        'slug' => 'distribution-plan',
        'text' => 'Distribution Plan',
    ];
}

echo 'Count: ' . count($arr); //Will print 2
v9tzhpje

v9tzhpje2#

如果更改三元值返回的值并使用spread运算符,则无需进行任何后续筛选或操作,即可获得所需的结果。
代码:(Demo

...(1 == 2)
    ? [['slug' => 'distribution-plan', 'text' => 'Distribution Plan']]
    : [],

通过向真实分支值添加深度级别,spread运算符将把单行推入数组。
通过将null更改为空数组,spread运算符不会将任何内容推入数组。
有点,有点,相关:
PHP is there a way to add elements calling a function from inside of array

相关问题