Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用来自键的字符串在数组中创建数组_Php_Arrays - Fatal编程技术网

Php 使用来自键的字符串在数组中创建数组

Php 使用来自键的字符串在数组中创建数组,php,arrays,Php,Arrays,我无法通过在PHP中创建我认为是2D数组的过程。我正在使用CSV作为源输入,并希望获取其中一列并将其拆分为一个数组 $csv = array_map("str_getcsv", file("data/data.csv", FILE_SKIP_EMPTY_LINES)); $keys = array_shift($csv); foreach ($csv as $i => $row) { $csv[$i] = array_combine($keys, $row); $li

我无法通过在PHP中创建我认为是2D数组的过程。我正在使用CSV作为源输入,并希望获取其中一列并将其拆分为一个数组

$csv = array_map("str_getcsv", file("data/data.csv", FILE_SKIP_EMPTY_LINES));
$keys = array_shift($csv);

foreach ($csv as $i => $row) {

    $csv[$i] = array_combine($keys, $row);

    $linkto  = $csv[$i]['linkto'];
    // $linktoArray = explode(" ", $linkto);

    echo '<pre>';
    // print_r($linktoArray);
    echo '</pre>';

    $csv[$i] = array_combine($keys, $row);

}

$csv['timestamp'] = time();

echo '<pre>';
print_r($csv);
echo '</pre>';
使用类似于我所评论的内容,我希望看到如下内容:

//The & symbol means any changes made to $row inside the foreach will apply outside the foreach.
foreach($csv as $i => &$row) {
    $row['linkto'] = explode(" ", $row['linkto']);
}

然而,现在我只是在包含数组之前得到一个数组。请原谅我的无知,我对前端没有太多经验。有什么建议吗?我相信这之前已经解释过了,但是我找不到合适的术语来使用搜索。

这相当简单。您需要做的就是:

$file = new SplFileObject("data/data.csv");
$file->setFlags(SplFileObject::READ_CSV | SplFileObject::SKIP_EMPTY);
$header_row = ($file->fgetcsv());

foreach ($file as $row) {
$row = array_combine($header_row, $row);
    $row['linkto'] = explode(" ", $row['linkto']);
    $csv[] = $row;
}

print_r($csv);
在再次阅读代码之后,您似乎正在与foreach的概念作斗争。使用foreach时,您不会像以前那样访问
$csv[$i]
,您只需使用
$row
。尝试以下方法:

//The & symbol means any changes made to $row inside the foreach will apply outside the foreach.
foreach($csv as $i => &$row) {
    $row['linkto'] = explode(" ", $row['linkto']);
}

这应该是您所需要的全部,而不是这些
array\u combine
东西。

下面是文档中的一个修改示例,它可能会将您的代码简化到足以隔离可能给您带来的问题:


如果我把它放在我的foreach中,似乎没有发生任何变化,我如何在循环时将它附加到正在创建的数组中?太棒了,就是这样!我不知道我可以在我的原稿之外申请foreach,但它仍然会影响我需要它的方式。供参考:太棒了!谢谢你,我将研究
SplFileObject
更多信息。他完全没有意识到这一点。我也喜欢这个方法,比我之前的方法更简洁,我添加的唯一更改是从CSV头创建的顶部数组中切片。
//The & symbol means any changes made to $row inside the foreach will apply outside the foreach.
foreach($csv as $i => &$row) {
    $row['linkto'] = explode(" ", $row['linkto']);
}
$file = new SplFileObject("data/data.csv");
$file->setFlags(SplFileObject::READ_CSV | SplFileObject::SKIP_EMPTY);
$header_row = ($file->fgetcsv());

foreach ($file as $row) {
$row = array_combine($header_row, $row);
    $row['linkto'] = explode(" ", $row['linkto']);
    $csv[] = $row;
}

print_r($csv);