$value = 1234;
$number_array = str_split($value);
for($i = 0; $i < sizeof($number_array); $i++) {
$number_array[$i] *= 10;
}
// output: 10, 20, 30, 40.
foreach($number_array as &$value) {
$value *= 10;
}
// output: 10, 20, 30, 30.
有人可以解释为什么for循环会给出所需的结果,但是foreach没有?
答案 0 :(得分:1)
因为for循环会更改$number_array
这样做会得到相同的结果
$value = 1234;
$number_array = str_split($value);
foreach($number_array as $value) {
$value *= 10;
echo $value;
// output: 10, 20, 30, 40.
}
for($i = 0; $i < sizeof($number_array); $i++) {
$number_array[$i] *= 10;
}
// output: 10, 20, 30, 40.
print_r($number_array);
答案 1 :(得分:0)
以下是var_dump
的结果:
for($i = 0; $i < sizeof($number_array); $i++) {
$number_array[$i] *= 10;
var_dump($number_array[$i]);
}
// output: int(10) int(20) int(30) int(40)
foreach($number_array as &$value) {
$value *= 10;
var_dump($value);
}
// output: int(100) int(200) int(300) int(400)
输出是不同的,因为你在第一个循环中为每个变量分配了它们的乘法值,然后在第二个循环中再次执行它。
如果您使用相同的值单独调用它们,它们将执行相同的输出。
答案 2 :(得分:0)
如果单独调用它,这两个循环的结果完全相同。但是在第一个循环中,您正在更改 $ number_array 。在第一次循环之前,它的值是[1,2,3,4],之后是[10,20,30,40]。
看看:
$value = 1234;
$number_array = str_split($value);
for($i = 0; $i < sizeof($number_array); $i++) {
$number_array[$i] *= 10;
}
var_dump($number_array); // 10, 20, 30, 40
foreach($number_array as &$value) {
$value *= 10;
}
P.S 如果您想为每个循环获得相同的结果,请更改您的代码:
$value = 1234;
$number_array = str_split($value);
for($i = 0; $i < sizeof($number_array); $i++) {
$x = $number_array[$i];
$x *= 10;
echo $x."</br>";
}
echo "---</br>";
foreach($number_array as &$value) {
$value *= 10;
echo $value."</br>";
}
注意:不要将值更改为数组,而是将其写入$x
变量并更改
答案 3 :(得分:0)
原来我用来创建字符串的循环导致输出不正确,因为我在字符串的foreach循环中再次使用$value
。
$value = 1234;
$number_array = str_split($value);
foreach($number_array as &$value) {
$value *= 10;
}
foreach($number as $value) {
$answr .= $value . " ";
}
// $answr = 10 20 30 30
我将循环更改为$num
进行测试后,打印出正确的输出。
foreach($number as $num) {
$answr .= $num . " ";
} //$answr: 10 20 30 40
一个不正常的怪癖,我还没有完全理解,但我假设它是因为$value
在第二个foreach循环期间仍被设置为var。
感谢您的所有答案,我为不发布整个代码段并造成混淆而道歉。