【问题标题】:php 2 foreachloopsphp 2 foreach循环
【发布时间】:2021-12-08 15:40:20
【问题描述】:

如果preg_match函数返回true,我想输出关联数组的key。

但不知何故,第二个 foreach 循环只返回一个键。

为什么会这样?

这是我的 php 代码:

<?php

     $log = file('ab.boerse.de.access.log.2');

     foreach ($log as $key => $value)
     {
         $result = explode(" ", $value);

         echo "<pre>";
         print_r($result);
         echo "</pre>";

         foreach ($result as $key2 => $value2)
         {
             echo "<pre>";
             print_r($key2);
             echo "</pre>";

             if (preg_match("/somedata/", $value2))
             {
                 print_r($key2);
             }
             else
             {
                 break;
             }
         }
     }
            
 ?>

这是输出的数组,下面有键“0”:

Array (
    [0] => localhost
    [1] => somedata
    [2] => somedata
    [3] => somedata
    [4] => somedata
    [5] => somedata
    [6] => somedata
    [7] => somedata
    [8] => somedata
    [9] => somedata
    [10] => somedata
    [11] => somedata
    
) 0

【问题讨论】:

  • 您能否提供一个非常简短的输入数据示例?此外,因为您正在输出 HTML,所以您需要向我们展示这一点,而不是呈现的 HTML。在上面的示例中,您没有向我们展示 pre 标签,尽管它们是隐含的。
  • 输入数据,文件中的数据是什么意思?
  • 并且在 print_r 周围没有 pre 标签吗? :)
  • 还是别的意思?
  • @ChrisHaas 你有第二个 foreach 的输入。输入文件并不重要。

标签: php foreach


【解决方案1】:

第一个项目的值是localhost 而不是somedata,因此正则表达式不匹配任何内容,它执行结束第二个 foreach 的中断。如果您想跳过不需要的项目,请尝试使用 continue 而不是 breakcontinue 仅终止循环的当前迭代并继续下一项。

【讨论】:

  • 我的意思是,这是循环中的最后一条指令,所以应该完全删除它。
猜你喜欢
  • 2018-07-01
  • 2016-09-26
  • 2012-07-19
  • 2015-12-10
  • 1970-01-01
  • 2014-03-15
  • 1970-01-01
  • 1970-01-01
  • 2015-07-03
相关资源
最近更新 更多