带有空项的PHP二维数组

时间:2016-08-28 11:47:07

标签: php arrays csv

在另一位用户的帮助下,我得到了我想要的二维数组。我得到的每个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被发送时。

我希望我能够解释得很清楚。

1 个答案:

答案 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".