【问题标题】:foreach loop with more than 2 objects具有超过 2 个对象的 foreach 循环
【发布时间】:2023-03-09 10:05:01
【问题描述】:

例子:

$get = file_get_contents("example-page-goes-here");

preg_match_all('/yadayada=\"(.*?)\" yadayada=\"(.*?)\" yadayada=\"yadayada\" yadayada=\"(.*?)\">/', $get, $title);

foreach ($title[1] as $link, $title[2] as $img, $title[3] as $title)
{
echo $link."<br>";
echo $img."<br>";
echo $title."<br>";
}

这可能吗?

【问题讨论】:

  • 你为什么要改变foreach的语法????
  • 如果你用$title检查print_r来分析数组是如何构建的?

标签: php foreach


【解决方案1】:

不,这是不可能的。 请查看documentation

你可以这样做:

<?php

foreach ($title as $index => $item) {
  if ($index == 1) {
    // $item is link now.
  }
}

另外,我建议您查看 switch 文档页面。

【讨论】:

  • 这个方法只抓取了第一个字符串。所有三个,但只有 1 个。
【解决方案2】:

只是扩展@HankyPanky 的答案,您可以使用max()count() 找到最长的数组长度,然后执行该长度的循环。

例如。

像这样获取最大计数

$count = array();
for($i = 1; $i <= 3; $i++){
  $count[$i] = count($title[$i]);
}
$maxCount = max($count);

然后像这样迭代并根据需要进行处理

for($x = 0; $x <= $maxCount; $x++){
  $link = '';
  $img = '';
  $title = '';

  if(isset($title[1][$x])){
    $link =  $title[1][$x];
  }

  if(isset($title[2][$x])){
    $img =   $title[2][$x];
  }

  if(isset($title[3][$x])){
    $title = $title[3][$x];
  }

  echo $link;
  echo $img;
  echo $title;
}

这不是最有效的方法,你可以修改它,但我认为这种方法是可行的。

【讨论】:

  • 使用这个方法只显示第一个字符串。所有这些,但只有 $link
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-03
  • 1970-01-01
  • 2013-05-20
  • 2023-01-10
  • 2021-10-27
  • 1970-01-01
相关资源
最近更新 更多