在循环中将多元素行推入二维数组时有条件地添加额外元素

问题描述 投票:0回答:3

在将该行推入结果数组之前,我尝试将数组元素添加到数组中(如果满足特定条件)。

现在,它将值添加为单独的单元素行。

for ($i = 0; $i < 4; $i++) {
    $ret1[] = array("A" . $i, "B" . $i);
    if ($i > 2) {
        $ret1[] = array("C" . $i);
    }
}    
print_r($ret1);

当前结果:

Array
(
    [0] => Array
        (
            [0] => A0
            [1] => B0
        )

    [1] => Array
        (
            [0] => A1
            [1] => B1
        )

    [2] => Array
        (
            [0] => A2
            [1] => B2
        )

    [3] => Array
        (
            [0] => A3
            [1] => B3
        )

    [4] => Array
        (
            [0] => C3
        )
)

预期结果:

(
    [0] => Array
        (
            [0] => A0
            [1] => B0
        )

    [1] => Array
        (
            [0] => A1
            [1] => B1
        )

    [2] => Array
        (
            [0] => A2
            [1] => B2
        )

    [3] => Array
        (
            [0] => A3
            [1] => B3
            [2] => C3
        )
)
php arrays multidimensional-array conditional-statements array-push
3个回答
1
投票

您可以使用临时变量来定义数组。然后你可以根据你的情况决定将另一个元素推入其中。最后,您可以将临时数组推送到您的

$ret1
数组以达到所需的结果。

for ($i=0; $i<5; $i++) {
    $arr = ["A$i", "B$i"];
    if ($i > 2) {
        $arr[] = "C$i";
    }
    $ret1[] = $arr;
}    

您正在做的是在循环的最后 2 次迭代中将 2 个元素推入数组。一个值为

["A3", "B3"]
,另一个值为
["C3"]
,这只会导致
[["A3", "B3"], ["C3"]]
,这不是您想要的。通过使用临时变量
$arr
,我们推迟将最终数组推送到
$ret1
,直到执行或绕过条件语句之后。

例如,在这个循环的倒数第二次迭代中,

$arr
的值最初是
["A3","B3"]
,然后我们基于
"C3"
$arr
,将另一个值
$i > 2
推到
true
的末尾,这使得
$arr = ["A3","B3","C3"]
,最后我们将
$arr
推到数组的末尾
$ret1
给出最终结果
[ ..., 3 => ["A3","B3","C3"], ...]

奖励说明

这些对你的问题或你的问题都不重要,但我想我会把它扔在那里以防万一。

在 PHP 中,双引号字符串 为您提供自动变量扩展。这意味着

"A$i" === "A" . $i
。所以只是需要考虑一下。此外,还有一种数组的简写语法,自 PHP 5.4.0 起就可用,并且在我个人看来,它比使用传统的 array()
 构造更容易编写和阅读。所以
array("A" . $i, "B" . $i) === ["A$i", "B$i"]


1
投票
你所做的并没有给你带来你期望的结果,因为每次你使用

$ret1[] = something

PHP 自动在

$ret 中创建一个 new

 索引。

如果您想将另一个字符串追加到刚刚插入到

$ret

 的数组中,您可以使用 
$ret1[$i][] = "C" . $i;
 而不是 
$ret1[] = array("C" . $i);
 指定当前键。


0
投票
一种现代方法是在将子数组推入结果数组时解压有条件填充的临时数组。

当空数组在附加到数组时被解包时,不会添加任何元素。

代码:(

演示

$result = []; for ($i = 0; $i < 4; ++$i) { $result[] = [ "A$i", "B$i", ...$i > 2 ? ["C$i"] : [] ]; } var_export($result);
    
© www.soinside.com 2019 - 2024. All rights reserved.