尝试查找匹配字符串时PHP中的2D数组失败

时间:2017-01-13 07:10:53

标签: php arrays loops multidimensional-array count

我还在学习PHP,但我需要一种方法来跟踪两个相关值的列表,一个电影院及其邮政编码。在你进一步阅读之前,我必须强调我在技术上并不需要解决这个问题,因为我已经用更有效的方法替换了它。我真的只是想知道为什么没有工作,因为我在其他地方找不到任何相关内容。

$cinema_locations = array(
    array("Odeon", "M4 2BS"),
    array("Cineworld", "OL7 0PG"),
    array("Vue", "M50 3AG"),
    array("AMC", "M3 4EN")
);
for ($i=0; $i<count($cinema_locations); $i++) {
    if ($cinema_locations[$i][0] == $_GET['cinema_name']) {
        $postcode = $cinema_locations[$i][1];
        return;
    }
}

正如您可以从代码中看到的那样,我试图遍历主数组,以便我可以将每个子数组的第一个值与$_GET变量进行比较。我已多次查看此代码,甚至展示了我的其他编码器朋友,我们都没有发现任何错误,语法或其他方面。然而,浏览器只显示白屏。如果有人能够对这个问题有所了解,我和我的朋友们会非常感激;并且谁知道,它可以帮助其他人解决同样的问题。

对于任何可能感到好奇的人,我用关联数组替换了2D数组:

$cinema_locations = array(
    "Odeon" => "M4 2BS",
    "Cineworld" => "OL7 0PG",
    "Vue" => "M50 3AG",
    "AMC" => "M3 4EN"
);
$postcode = $cinema_locations[$_GET['cinema_name']];
  

修改

谢谢rishi,做到了。我甚至从未认为return会使结果无效。使用break停止循环,页面的其余部分加载正常。

2 个答案:

答案 0 :(得分:5)

您应该写break;而不是return;

如果您符合条件,则需要break你的for循环。并继续下面的代码。

return会立即从其调用的位置返回值。

答案 1 :(得分:1)

对于无法更改数组结构的情况,此代码是更好的方法。

// same array as the original post
$cinema_locations = array(
    array("Odeon", "M4 2BS"),
    array("Cineworld", "OL7 0PG"),
    array("Vue", "M50 3AG"),
    array("AMC", "M3 4EN")
);

foreach ($cinema_locations as $c_loc) {
    $postcode = ($_GET'cinema_name'] == $c_loc[0]) ? $c_loc[1] : null;
}

print $postcode;

当然,你不应该像这样直接使用$_GET,但你可能已经知道了。