我一直围着这个圈子走,我希望有人可以提供帮助。
我有一个包含数据的.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实际上是颠倒的,但这是管理它的最简单方法。
我可以发布一些我尝试过的代码,如果有帮助的话,但说实话,这有点乱,所以我希望有人可以用一些正常的代码指出我正确的方向。
任何帮助表示赞赏!感谢。
答案 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