PHP:如何遍历多维数组并输出子数组而不是子数组的元素

时间:2017-04-20 17:32:29

标签: php arrays

这是我的第一个问题,因为我经常找到我要找的东西,但在这里我迷路了。

我通过以下方式创建了一个多维数组:

这是代码 - 从输入到推送:

这是textarea的输入:

VIE-CAI
HAV-VRA
JFK-SYD

这里我在点击后从文本区域获取数据,输入新元素后应该使用目标字符串创建:

$textarea = $_POST['many_destinations'];
$textarea = str_replace(' ', '', $textarea);
$textarea = strtoupper($textarea);
$textarea =  preg_split("/(\r\n|\n|\r)/", $textarea);

现在我将这些字符串“爆炸”为数组元素。将它们存储在主数组$ textarea_new

 foreach($textarea as $row) {
      $routes = explode('-', $row);
      array_push($textarea_new, $routes);
  }

在整个click函数的开头,我将这个数组声明为:

$textarea_new = array();

所以现在我希望它看起来像这样:

$textarea_new = array
      (
      array("VIE","CAI"),
      array("HAV","VRA"),
      array("JFK","SYD")
      );

编辑:从你的评论中我可以假设它看起来不像这样,因为你没有遇到以下循环的任何问题:

现在我想循环遍历每个路径(子阵列)并输出它,以便我可以单独处理每个子阵列。

我在stackoverflow上发现的最重要的建议之一是以下内容,但它给了我非常奇怪的结果:

foreach ($textarea_new as $route) {
        if (is_array($route)){
            foreach($route as $destination){
                echo $destination." ";

            }
        } 
    }

上述功能的输出如下: VIE CAI HAV VRA JFK SYD VIE CAI HAV VRA JFK SYD VIE CAI HAV VRA JFK SYD

但实际上应该只是:

VIE CAI HAV VRA JFK SYD

请告诉我您是否需要更多信息,特别是如果这不是正确的方法。谢谢!

1 个答案:

答案 0 :(得分:0)

唯一真正的准备是,首先,将所有字母设置为大写。除此之外,只需编写一个可以一步验证和提取的正则表达式模式,然后就可以循环结果。

代码:(Demo)(Pattern Demo

$flightpaths = 'VIE-CAI
hav-vra
JFK-SYD';

if (!preg_match_all('~^([A-Z]{3})-([A-Z]{3})$~m', strtoupper($flightpaths), $out, PREG_SET_ORDER)) {
    echo 'Invalid Entry';
} else {
    foreach ($out as $row) {
        echo "Destination #1: {$row[1]}\n";
        echo "Destination #2: {$row[2]}\n\n";
    }
}

输出:

Destination #1: VIE
Destination #2: CAI

Destination #1: HAV
Destination #2: VRA

Destination #1: JFK
Destination #2: SYD