PHP使用来自许多foreach

时间:2017-05-10 11:49:10

标签: php arrays multidimensional-array

我正在抓取一个电子商务网站,需要从产品中获取一些数据,如产品名称,价格等......

为此,我有:

...
// library includes... 
$html = file_get_html($link);
foreach($html->find('.productBoxClass') as $element){

  foreach($element->find('.productTitle') as $product) {
    $product = $product->plaintext;
  }

  foreach($element->find('.price') as $price) {
    $price = $price->outertext;
  }  

   // and so on...
}

我想将这些数据保存在数据库中。所以,我想保存数组中的所有数据,以便在验证每个产品后,如果我必须插入或只是更新。我打算使用这些数据填充多维数组:

数组的每个位置都包含另一个包含有关一个产品的信息的数组...为了便于在...之后保存在数据库中

任何帮助?

3 个答案:

答案 0 :(得分:0)

这似乎是一个异常的数据结构,或者你应该以不同的方式循环它。但如果它是一个异常的结构,产品和价格没有组合在一起,它们只是按相同的顺序列出,那么这应该有效:

$products = [];

$i = 0;
foreach($element->find('.productTitle') as $product) {
   $products[$i++]['product'] = $product->plaintext;
}

$i = 0;
foreach($element->find('.price') as $price) {
   $products[$i++]['price'] = $price->outertext;
}  

注意$ i ++作为每个循环增加$ i的键。

如果产品和定价在一个元素中组合在一起,那么您应该循环使用该元素,并且不需要为产品和价格进行预测。

答案 1 :(得分:0)

请检查以下代码,让我知道您的想法......

<?php
// library includes... 
$html = file_get_html($link);
$productArr = array();
foreach($html->find('.productBoxClass') as $element){
 $tempArr = array('title' => '','price' => 0,'other' => ''); // declare temp array for stroing each product nodes   
  foreach($element->find('.productTitle') as $product) {
    $tempArr['title'] = $product->plaintext; // To do check for empty text here
  }

  foreach($element->find('.price') as $price) {
    $tempArr['price'] = $price->outertext; // To do validate the price
  }  

  foreach($element->find('.other-features') as $price) {
    $tempArr['other'] = $price->outertext; // To do validate the price
  }  
  // and so on... with $tempArr['key']
  // then assign
  $productArr[] = $tempArr; // save temp array in global product array
}

// Product array
echo '<pre>';print_r($productArr);die;

答案 2 :(得分:0)

首先使用计数项:

...
// library includes... 
$html = file_get_html($link);

// Array declaration
$products = array();

foreach($html->find('.productBoxClass') as $i => $element){

  foreach($element->find('.productTitle') as $product) {
   $products[$i]['name'] = $product->plaintext;
  }

  foreach($element->find('.price') as $price) {
    $products[$i]['price'] = $price->outertext;
  }  

   // and so on...
}

结果:

 Array
    (
        [0] => Array
            (
                [name] => Product 1
                [price] => 1.00
            )

        [1] => Array
            (
                [name] => Product 1
                [price] => 1.00
            ),
    ...
    )