将条目添加到多元数组

时间:2016-08-25 23:23:04

标签: php arrays multidimensional-array

在将数组推送到另一个数组之前,如果满足某个条件,我会尝试将数组元素添加到数组中。现在它将值添加为单独的数组,并且它不在同一个数组中。

Sub WorkseetParsingLoopToGetData()
     Dim I as Integer
     Dim WS_Count as Integer
     Dim ConsolidationArray as Variant

     WS_Count = ActiveWorkbook.Worksheets.Count 'last worksheet
     ReDim ConsolidationArray(2 to WS_Count) 'Array to be Sheet2 to last worksheet

     For I = 2 to WS_Count
          ConsolidationArray(I) = Worksheets(I).Name & "!C54:H56"
     Next I
     Sheets("Summary").Range("J4").Consolidate sources:=(ConsolidationArray), Function:=xlAverage
End Sub

当前结果:

<?php

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
        )

)

2 个答案:

答案 0 :(得分: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的末尾,为我们提供最终结果{{1} }

奖金说明

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

在PHP中,double quoted strings为您提供自动变量扩展。这意味着[ ..., 3 => ["A3","B3","C3"], ...]。所以只需考虑一下。此外,还有一个short-hand syntax for arrays,可用since PHP 5.4.0,我个人认为比使用传统的"A$i" === "A" . $i结构更容易编写和阅读。所以array()

答案 1 :(得分:1)

您每次使用

时,您所做的并不是给您预期的结果
$ret1[] = something

PHP会在$ret中自动创建索引。

如果您想将另一个字符串追加到刚刚插入$ret的数组中,可以使用$ret1[$i][] = "C" . $i;而不是$ret1[] = array("C" . $i);指定当前密钥。