从多个foreach语句添加到数组

时间:2017-07-25 20:43:29

标签: php arrays foreach

我尝试将动态生成的变量$title$price添加到数组$list

这在一定程度上起作用。代码创建一个带有键的数组,它们具有标题和价格值。

价格值是正确的,每个键都不同。但是,似乎只添加了第一个title结果,创建了以下数组(相同的标题直到键30)

 [0]=> array(2) { ["title"]=> string(57) "Gibson Les Paul ** Nr.1 Gibson dealer ** 18 gitaarwinkels" ["price"]=> string(25) " € 300,00 " } [1]=> array(2) { ["title"]=> string(57) "Gibson Les Paul ** Nr.1 Gibson dealer ** 18 gitaarwinkels" ["price"]=> string(25) " € 100,00 " }

查看代码我认为这是因为第一个foreach循环只执行第二个。

我知道$title的正确值是存在的,因为当我像这样隔离标题foreach循环时:

  foreach ($titlehit as $titles) {
  $title = $titles->nodeValue;
  echo "$title";
}

显示30个不同的$title结果

$url = "https://url.com";

$html = new DOMDocument();
@$html->loadHtmlFile($url);
$xpath = new DOMXPath($html);

$titlehit = $xpath->query("//span[@class='mp-listing-title']");
$pricehit = $xpath->query("//span[@class='price-new']");

$list = array();
$i = 0;

  foreach ($titlehit as $titles) {
    foreach ($pricehit as $prices) {
      if ($i >=5 && $i <=35) {
        $title = $titles->nodeValue;
        $price = $prices->nodeValue;
        $list[] = array(
          'title' => $title,
          'price' => $price
          );
        }
      $i++;
    }
  }

如何让数组$list同时保存正确的标题和价格值?谢谢你的帮助。

2 个答案:

答案 0 :(得分:0)

这里的代码不够确切,但看起来你需要在$i循环的每次迭代中重置迭代器foreach

$list = array();    
  foreach ($titlehit as $titles) {
    $i = 0;
    foreach ($pricehit as $prices) {
      if ($i >=5 && $i <=35) {
        $title = $titles->nodeValue;
        $price = $prices->nodeValue;
        $list[] = array(
          'title' => $title,
          'price' => $price
          );
        }
      $i++;
    }
  }

答案 1 :(得分:0)

假设每个标题都有一个价格,即相应数组中的标题与价格比率为1:1,您只需要1个循环。

using