在另一位用户的帮助下,我得到了我想要的二维数组。我得到的每个ID($ talente)都会从CSV中保存一行。就像阵列的魅力一样。但输出让我困惑。
这是我使用的CSV:
Schild,1,Licht,1w10,-
Schutz,1,Licht,1w10,-
Licht,4,Licht,1w10,-
Genesung,1,Licht,-,-
Aufopfern,1,Licht,-,-
剧本:
<?php
$talente = $_GET['talente'];
$myFile = fopen("talente.csv", "r");
$csv = [];
while ($data = fgetcsv($myFile, 1000, ",")) {
$csv[] = $data;
}
fclose($myFile);
$talentline = array_filter($csv, function($i) use ($talente) {
return in_array($i, $talente);
}, ARRAY_FILTER_USE_KEY);
print_r(array_values($talentline));
echo $talentline[1][0];
echo $talentline[2][0]; //line 21.
echo $talentline[3][0];
?>
的print_r(array_values($ talentline));给我以下输出为id&amp; 1&amp; 3.
[0] => Array (
[0] => Schutz
[1] => 1
[2] => Licht
[3] => 1w10
[4] => -
)
[1] => Array (
[0] => Genesung
[1] => 1
[2] => Licht
[3] => -
[4] => -
)
最后的三个回声给我这个:
舒茨 注意:未定义的偏移量:第21行的C:\ xampp \ htdocs \ DvC Generator \ php \ test.php中的2 Genesung
我可以解决两个问题。第一个是,印刷线在我预期的一行之后是一行。所以不是&#34; Schutz&#34;我期待&#34; Schild&#34;。
我遇到的更大问题是脚本将行保存在等于ID的数组位置。这不是我需要的,因为它也节省了空数组元素。我希望的结果是阵列[0]的Schild和阵列[1]的Licht,当ID 1和3被发送时。
我希望我能够解释得很清楚。
答案 0 :(得分:1)
0
首先是零,1是第二。
您的问题&#34; undefined Offset&#34;是因为你只是&#34;保持&#34;在$_GET['talente']
输入数组中找到的数组值。如果将此值更改为2
,那么您将获得1和3等未定义的偏移通知。
你的第一个问题是数组从[0]
开始,所以如果新talentline
数组中有两个值,那么第一个是键[0]
,第二个值是键{{1 }}。等。
您的第二个问题与此相关,因为您正在比较匿名函数中的键值,您正在通过询问值{{1}来查找第一个值(数组键[1]
)由[0]
数组给出的。这就是它为您提供未经预期(但正确)结果的原因。
对于第二个问题(这是一个编码错误):
您需要通过将键值增加+1或将输入参考值减少-1来调整键值,以使输入与给定的CSV值对齐:
1
其次, 要修复脚本中稍后引用未设置数组引用的注意事项:
$_GET
我曾用过的代码来回答这个问题(PHP 5.6.2)。显然,调整后我没有要导入您的CSV文件等。
return in_array($i, $talente--); //reduces the input comparison value by 1,
//so that the first value ("1") is treated as key "0".