【问题标题】:2D Array in PHP Fails When Trying to Find Matching String尝试查找匹配字符串时 PHP 中的 2D 数组失败
【发布时间】:2017-05-28 12:06:56
【问题描述】:

我仍在学习 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 变量进行比较。我已经多次检查了这段代码,甚至还向我的一些其他程序员朋友展示了这些代码,但我们都找不到任何错误,无论是语法还是其他问题。然而,浏览器只显示一个白屏。如果有人能对这个问题有所了解,我和我的朋友们将不胜感激;谁知道呢,它可能会帮助其他人解决同样的问题。

对于任何可能好奇的人,我将二维数组替换为关联数组:

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

编辑

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

【问题讨论】:

  • 好吧,如果这就是你的代码所做的一切(给 $postcode 赋值,然后返回 null),那么你显然会一无所获。你甚至应该用那个变量做什么?
  • 使用in_array函数查找值

标签: php arrays loops multidimensional-array count


【解决方案1】:

也许你应该写break;而不是return;

如果你满足条件,你需要break你的for循环。并继续下面的代码。

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

【讨论】:

    【解决方案2】:

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

    // 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,但你可能已经知道了。

    【讨论】:

    • 很高兴知道。我没有太多使用缩写 then/else 的经验,但我想我应该学习。是的,我知道以这种方式使用$_GET 的不安全感,这只是为了我的大学作业,全部在本地服务器上。
    • @Alek 三元运算符、lambda 函数、数组映射函数... PHP 提供了很多东西来简化编码。
    • 我会记住这一点的。我两个月前才开始学习它,所以我还在学习。
    • @Alek 祝你好运,但请尽快改用 Symfony 或 Laravel 等框架。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-06-26
    • 2014-02-08
    • 2022-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-29
    相关资源
    最近更新 更多