PHP循环与While循环混淆

时间:2017-02-16 08:22:01

标签: php arrays loops

我目前有一个简单的WHILE循环,如下所示:

while($los = $result->fetch_row())
    {
        echo"<tr><td>".$los[0]."</td>";
        echo"<td>".$los[1]."</td>";
        echo"<td>".$los[2]."</td></tr>";
    }

$los的内容如下:

London    => 15 => 32
Glasgow   => 23 => 45
Leeds     => 1  => 12
Truro     => 5  => 23

所有工作正常但我正在努力的是我有第二个数组$outs,其内容是:

London    => 3 
Glasgow   => 5 
Liverpool => 2
Poole     => 1

在第一个while循环中,我尝试在位置名称匹配时从value减去$outs的{​​{1}}。我尝试在while循环中添加以下内容但没有快乐:

$los

但是没有快乐,当我在while循环中尝试if($los[0] == $outs[0]){ $los[1] = $los[1]-$outs[1]; } 时,它返回的全部是:

print_r($outs)

我无法理解我哪里出错或即使这是可能的。 Poole => 1 Poole => 1 Poole => 1 Poole => 1 数组是否在第一个循环中被修改?任何想法,建议或指示都欢迎我如何实现这一目标。

VAR DUMPS

因此,根据要求,两个数组的内容是:

$洛斯

$outs

$出局

London    => 15 => 32
Glasgow   => 23 => 45
Leeds     => 1  => 12
Truro     => 5  => 23

然而,当我在London => 3 Glasgow => 5 Liverpool => 2 Poole => 1 内的$outs时,vldump或print_r的内容是:

while($los = $result->fetch_row())

其他代码

获取Poole => 1 Poole => 1 Poole => 1 Poole => 1 数组的代码是:

$outs

1 个答案:

答案 0 :(得分:1)

请考虑发布由var_dump生成的RAW内容,并包含一个完整但最小的脚本来产生错误。

这里不清楚似乎是$outs是(1)键值数组还是包含子数组的if。(

)。

选项1:

$outs = [
    "London"    => 3,
    "Glasgow"   => 5,
    "Liverpool" => 2,
    "Poole"     => 1
];

选项2:

$outs = [
    ["London", 3],
    ["Glasgow", 5],
    ["Liverpool", 2],
    ["Poole", 1]
];

我做的测试假设您的输入行如下所示:

$citys = [
    ["London", 15, 32],
    ["Glasgow", 23, 45],
    ["Leeds", 1, 12],
    ["Truro", 5, 23]
];

根据这一点,您可以调整while循环中的if

对于选项1

foreach ($citys as $los) {
    if (array_key_exists($los[0], $outs)) {
        $los[1] = $los[1] - $outs[$los[0]];
    }

    echo " <tr><td > " . $los[0] . "</td > ";
    echo "<td > " . $los[1] . "</td > ";
    echo "<td > " . $los[2] . "</td ></tr > ";
}

对于选项2 ,它需要更多代码,因为我们需要先在$outs内搜索cityname索引。在php&gt; 5.5可以使用array_column来完成,这会更容易。

foreach ($citys as $los) {
    $indexInOuts = null;
    foreach($outs as $index => $out){
        if($los[0] === $out[0]){
            $indexInOuts = $index;
            break;
        }
    }

    if($indexInOuts !== null){
        $los[1] = $los[1] - $outs[$indexInOuts][1];
    }

    echo " <tr><td > " . $los[0] . "</td > ";
    echo "<td > " . $los[1] . "</td > ";
    echo "<td > " . $los[2] . "</td ></tr > ";
}

两个选项的输出如下:

London 12 32 
Glasgow 18 45 
Leeds 1 12 
Truro 5 23

正如评论中所说,你每次都要取代$ out。所以编辑它看起来像这样:

$outs = [];
while ($row19 = $result19->fetch_assoc()) {
   $outs[] = $row19;
}