使用key中的字符串在数组中创建数组

时间:2014-01-31 16:23:02

标签: 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);

    $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>';

将输出:

Array
(
    [0] => Array
        (
            [color] => 1
            [shape] => 0
            [label] => string
            [size] => 1
            [linkto] => 1 2 3
        )...

使用类似于我评论的内容,我很乐意看到类似的内容:

Array
(
    [0] => Array
        (
            [color] => 1
            [shape] => 0
            [label] => string
            [size] => 1
            [linkto] => Array
                (
                    [0]=>1
                    [1]=>2
                    [2]=>3
                )
        )...

但是,现在我只是在包含数组之前得到一个数组。原谅我的无知,我没有多少经验超过前端。有什么建议?我确信之前已经解释过,但我找不到合适的术语来利用搜索。

2 个答案:

答案 0 :(得分:1)

这是相当直接的。您需要做的就是:

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

在再次阅读您的代码后,您似乎正在努力实现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_combine这些东西。

答案 1 :(得分:1)

以下是SplFileObject::fgetcsv文档中的修改示例,该示例可能会简化您的代码,足以隔离可能会给您带来问题的内容:

$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);