使用PHP从csv矩阵中选择特定值

时间:2014-05-14 17:44:28

标签: php csv

我一直围着这个圈子走,我希望有人可以提供帮助。

我有一个包含数据的.csv文件,例如:

  

体重,10,20,30,40

     

产品1,1,2,3,4

     

产品2,2,4,6,8

     

产品3,3,6,9,12

我需要做的是,使用PHP,从矩阵中选择行是“product2”的值,并且该行中的数字与最接近的舍入对应的权重为27.因此结果应为6

我尝试使用fgetcsv将csv行添加到数组中并循环以获取第一个数组项= product2的行,但我无法将其与第1行的权重值交叉引用。

我很欣赏这个csv实际上是颠倒的,但这是管理它的最简单方法。

我可以发布一些我尝试过的代码,如果有帮助的话,但说实话,这有点乱,所以我希望有人可以用一些正常的代码指出我正确的方向。

任何帮助表示赞赏!感谢。

2 个答案:

答案 0 :(得分:0)

<?php
    $first_line;
    $other_lines_separated;
    $file=file('CSV_File_location'); //Put file contents in an array with each item being a line
    foreach($file as $f){
        //Get each line then break that line an into a array
        $values=explode(',',$f);
        //If this is the first line we want it separate
        if($f== $file[0]){
            $first_line=$values;
        }else{
            $other_lines_separated[]=$values;
        }
     }


//We now have an array with the first line and an array holding the other arrays with values separated
 //Go through each of the other arrays and do what you need

 for($i=0;$i<count($other_lines_separated); $i++){
      $other_line= $other_lines_separated[$i];
      for($y=0;$y<count($other_line); $y++){
         // in here we'll have access to any value we need
         if($other_line[$y] == "product1"){
          //We're on the product1 line
         }
         if($other_line[$y] == "product2"){
          //We're on the product2 line
         }
         if($other_line[$y] == "product3"){
          //We're on the product3 line
         }
         echo "currently at value ".$other_line[$y]."</br>";
      }
 }




?>

答案 1 :(得分:-1)

您应该定义最接近的舍入匹配。对于24它应该看起来20的值?我认为,据我所知,对于你使用它24时它也应该是30,否则你应该定义是否应该为一半的权重(第一列)定义圆形。

有一些示例代码可以正常工作,因此对于24,它也会选择30

PHP file:


<?php

$name = 'product2';
$weight = 24;

$lines = explode("\n", file_get_contents("test.csv"));

$found= '';

$foundCost = false;

foreach ($lines as $line) {
  if (strpos($line,$name.',') === 0) {
     $found = $line;
     break;
  }
}






if ($found != '') {
    $found = explode(',', $found);
    $weights = explode(',',$lines[0]);

    $index = false;

    for ($i=1; $i<count($weights); ++$i) {
       if ($weights[$i] >= $weight)  {
           $index = $i;
           break;
       }       
    }
    if ($index !== false) {
        $foundCost = $found[$index];    
    }

}

if ($foundCost !== false) {

    echo "found ".$foundCost;
}

CSV文件(我假设之后没有空格,就像在普通的CS文件中一样):

Weight,10,20,30,40
product1,1,2,3,4
product2,2,4,6,8
product3,3,6,9,12