I'm try to add an array element to an array (if a certain condition is met) before I push that row into a result array.
Right now, it adds the value as a separate, single-element row.
for ($i = 0; $i < 4; $i++) {
$ret1[] = array("A" . $i, "B" . $i);
if ($i > 2) {
$ret1[] = array("C" . $i);
}
}
print_r($ret1);
Current result:
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
)
)
Expected result:
(
[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
)
)
You can use a temporary variable to define the array. Then you can decide to push another element to it based on your condition. Finally you can push the temporary array to your $ret1
array to achieve the desired result.
for ($i=0; $i<5; $i++) {
$arr = ["A$i", "B$i"];
if ($i > 2) {
$arr[] = "C$i";
}
$ret1[] = $arr;
}
What you're doing is pushing 2 elements to the array in the last 2 iterations of your loop. One with a value of ["A3", "B3"]
and another with a value of ["C3"]
which just results in [["A3", "B3"], ["C3"]]
, which isn't what you're after. By using the temporary variable $arr
we defer pushing the final array to $ret1
until after the conditional statement is executed or bypassed.
So for example, in the penultimate iteration of this loop the value of $arr
is initially ["A3","B3"]
, then we push another value "C3"
to the end of $arr
based on $i > 2
being true
, which makes $arr = ["A3","B3","C3"]
, and finally we push $arr
to the end of the array $ret1
giving us the final result [ ..., 3 => ["A3","B3","C3"], ...]
None of this is critical to your problem or your question, but I figured I'd throw it out there just in case.
In PHP, double quoted strings give you automatic variable expansion. Which means that "A$i" === "A" . $i
. So just something to consider. Additionally, there is a short-hand syntax for arrays, which has been available since PHP 5.4.0 and in my personal opinion is easier to write and read than using the traditional array()
construct. So array("A" . $i, "B" . $i) === ["A$i", "B$i"]
.