doushuo1080 2014-01-31 16:23
浏览 25
已采纳

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

I can't get past making what I think is a 2D Array in PHP. I'm using a CSV as source input and want to take one of the columns and split that into an array as well.

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

Will output:

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

Using something similar to what I commented out, I'd love to see something like:

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

However, right now I'm just getting an array before my containing array. Pardon my ignorance, I haven't had much experience past the front-end. Any suggestions? I'm sure this has been explained before, but I can't find the right terminology to utilize a search.

  • 写回答

2条回答 默认 最新

  • douxu3732 2014-01-31 16:25
    关注

    It's fairly straight forward. All you need to do is this:

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

    After having read through your code again, you seem to be struggling with the concept of foreach. When you use foreach you don't access $csv[$i] like you have, you just use $row. Try something like:

    //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']);
    }
    

    That should be all you need, none of this array_combine stuff.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥60 pb数据库修改或者求完整pb库存系统,需为pb自带数据库
  • ¥15 spss统计中二分类变量和有序变量的相关性分析可以用kendall相关分析吗?
  • ¥15 拟通过pc下指令到安卓系统,如果追求响应速度,尽可能无延迟,是不是用安卓模拟器会优于实体的安卓手机?如果是,可以快多少毫秒?
  • ¥20 神经网络Sequential name=sequential, built=False
  • ¥16 Qphython 用xlrd读取excel报错
  • ¥15 单片机学习顺序问题!!
  • ¥15 ikuai客户端多拨vpn,重启总是有个别重拨不上
  • ¥20 关于#anlogic#sdram#的问题,如何解决?(关键词-performance)
  • ¥15 相敏解调 matlab
  • ¥15 求lingo代码和思路