PHP:从外部文件中的字符串中提取数据,以具有三个单独的数组或多维数组

时间:2017-06-12 03:35:46

标签: php arrays multidimensional-array

我试图创建一个允许我的脚本:

  1. 通过使用以下格式保存db_products.php文件中的所有数组来创建产品数据库:

    $products[] = "Bread|2.0|0.50";
    $products[] = "Milk|3.0|0.70";
    ...
    
  2. 哪里"面包"是项目名称," 2.0"是他的价格和" 0.5"是生产成本;

      在show_me_products.php中的
    1. ,我想在纯html表中提取并插入所有数据,如下所示:

              | BREAD |  MILK | ... |
      price   | 2.00$ | 3.00$ | ... |
      costs   | 0.50$ | 0.70$ | ... |
      gain    | 1.50$ | 2.30$ | ... |
      
    2. 我尝试做什么

      $handle = "db_products.php";
      
      fopen($handle, "r"); // or also file_get_contents
      $count = count($products);
      
      for($i=0; $i < $count; $i++){
      
      list($product, $price, $cost) = explode("|", $products[$i]);
      
      $product_array = implode(", ", $product);
        $price_array = implode(", ", $price);
         $cost_array = implode(",", $cost);
      
      }
      
      <html code...>
      <table>
      <tr>
      <th></th>
      
      <? foreach($product_array as $id => $prod): ?>    
      <td><? echo $prod; ?></td>   
      <? endforeach; ?>
      
      </tr>
      <tr>
      <th>price</th>
      
      <? foreach($product_array as $how => $much): ?>    
      <td><? echo $much; ?></td>   
      <? endforeach; ?>
      
      ...
      

      当然,这段代码不起作用。 我知道存在概念错误,我应该做出更好的语法选择,但我认为距离解决方案只有一步之遥,但我无法看到它。

      我忘记了什么? 任何建议都将受到高度赞赏。 提前谢谢。

2 个答案:

答案 0 :(得分:0)

请找到下面的代码,看看这是否是您期望的结果,在您的原始代码中,您可能不需要fopen,只需简单地包含php文件(它只是回显sctript),如果它&# 39;就像你描述db_products.php只有产品数组一样。其次,您可以使用html标记加入字符串,而不是使用多个for循环。以下是我的第一次尝试,请检查它是否符合您的预期。一旦我有更多时间,我会做一些修改。感谢

<html>
<body>
<?php

include('file.php'); #simply include the product array


$count = count($products);
$header = '<td></td><td>'; #Product headers first column is empty
$priceRow = '<td>price</td><td>'; #Price row, first column to store row name
$costRow = '<td>cost</td><td>'; #cost
$gainRow = '<td>gain</td><td>'; #gain
echo '<table>';

for($i=0; $i < $count; $i++){

    list($product, $price, $cost) = explode("|", $products[$i]);
    $header .= $product . '</td><td>';
    $priceRow .= $price . '</td><td>';
    $costRow .= $cost . '</td><td>';
    $gainRow .= $price-$cost . '</td><td>';

}

#print header
echo '<tr>';
echo $header;
echo '</tr>';

#print price
echo '<tr>';
echo $priceRow;
echo '</tr>';

#print cost
echo '<tr>';
echo $costRow;
echo '</tr>';

#print gain
echo '<tr>';
echo $gainRow;
echo '</tr>';

echo '</table>';
?>


</body>
</html>

答案 1 :(得分:0)

感谢您的贡献,Ryo。 在我的脚本中修复错误很有帮助(include - fopen)。 实际上db_product.php它不是一个文本文件,那么使用&#34; fopen&#34;是多余的。打开一个php文件。 无论如何,我的目的是将PHP代码与HTML代码分开。这就是为什么我谈到&#34;一个纯HTML表&#34;。 数据必须在其引用数组中保持干净,而不在字符串中附加HTML代码。

今天处理我的代码,我发现了一个潜在的解决方案。

include("file.php");

        $count = count($products);

$product_array = array(); // initialize product_array
  $price_array = array(); // initialize price_array
   $cost_array = array(); // initialize cost_array
   $gain_array = array(); // initialize gain_array

for($i=0; $i < $count; $i++):

list($product, $price, $cost) = explode("|", $products[$i]);

$product_array[$i] = $product; // fill product_array
  $price_array[$i] = $price; // fill price_array
   $cost_array[$i] = $cost; // fill cost_array
   $gain_array[$i] = $price - $cost; // calculate difference and create gain_array

endfor;
?>

<html code...>

<table>
<thead>
<tr>
<th></th>

<? foreach($product_array as $product_unit): ?>
<th><? echo $product_unit; ?></th>
<? endforeach; ?>

</tr>
</thead>

<tfoot>
<tr>
<th>gain</th>

<? foreach($gain_array as $gain_unit): ?>
<td><? echo $gain_unit; ?></td>
<? endforeach; ?>

</tr>
</tfoot>
<tbody>
<tr>
<th>price</th>

<? foreach($price_array as $price_unit): ?>
<td><? echo $price_unit; ?></td>
<? endforeach; ?>

</tr>
<tr>
<th>costs</th>

<? foreach($cost_array as $cost_unit): ?>
<td><? echo $cost_unit; ?></td>
<? endforeach; ?>

</tr>
</table>

这段代码完美无缺,但并不像我想的那样干净利落。 有没有更好的方法来做到这一点,考虑到我想保留单独的PHP代码和HTML代码?

提前致谢:)