繁体   English   中英

在重复的数组键/值中插入默认值

[英]Insert default values in duplicated array key/values

我有一个以这种方式构造的csv文件。 它提供了按小时显示的页面浏览量

 "00","ARTICLE 1",100
 "00","ARTICLE 2",50
 "00","ARTICLE 3",30
 "01","ARTICLE 1",40
 "01","ARTICLE 2",100
 "01","ARTICLE 4",200
 "02","ARTICLE 1",30
 "02","ARTICLE 2",40
 "02","ARTICLE 3",30
 "03","ARTICLE 5",30

我将csv导入我的php代码中,并将内容插入多维数组中。 当我var_dump我的数组这就是我得到的

Array
(
[00] => Array
    (
        [ARTICLE 1] => 100
        [ARTICLE 2] => 50
        [ARTICLE 3] => 30
    )

[01] => Array
    (
        [ARTICLE 1] => 40
        [ARTICLE 2] => 100
        [ARTICLE 4] => 200
    )

[02] => Array
    (
        [ARTICLE 1] => 30
        [ARTICLE 2] => 40
        [ARTICLE 3] => 30
    )

[03] => Array
    (
        [ARTICLE 5] => 30
    )

)

所以我的问题是“文章4”仅在“ 01”处查看过,但我希望它出现在键“ 00”,“ 02”,“ 03”中,默认值为0。“ ARTICLE 5”也是如此仅出现在键“ 03”上。 我希望它出现在键“ 00”,“ 01”,“ 02”,“ 03”,“ 04”中

最后,我想让我的阵列像这样出现

Array
(
 [00] => Array
    (
        [ARTICLE 1] => 100
        [ARTICLE 2] => 50
        [ARTICLE 3] => 30 
        [ARTICLE 4] => 0
        [ARTICLE 5] => 0
    )

[01] => Array
    (
        [ARTICLE 1] => 40
        [ARTICLE 2] => 100
        [ARTICLE 3] => 0
        [ARTICLE 4] => 200
        [ARTICLE 5] => 0
    )

[02] => Array
    (
        [ARTICLE 1] => 30
        [ARTICLE 2] => 40
        [ARTICLE 3] => 30
        [ARTICLE 4] => 0
        [ARTICLE 5] => 0
    )

[03] => Array
    (
        [ARTICLE 1] => 0
        [ARTICLE 2] => 0
        [ARTICLE 3] => 0
        [ARTICLE 4] => 0
        [ARTICLE 5] => 30
    )

)

我试图做这样的事情,但它不起作用

foreach ($orig as $item) {
$new[] = $item;
$new[] = $item;

}

有人可以帮忙吗?

UPDATE

我尝试过这样的事情

foreach ($articles as $article) 
{
$pageviews2[$article] = $pageviews;
}

其中$ pageviews2包含我的csv文件的内容,并且数组文章的结构是这样的

$articles = Array("00", "01", "02", "03","04","05");

下面是我在var_dump $ pageviews2数组中获得的结果

Array
(
[00] => Array
    (
        [00] => Array
            (
                [ARTICLE 1] => 100
                [ARTICLE 2] => 50
                [ARTICLE 3] => 30
            )

        [01] => Array
            (
                [ARTICLE 1] => 40
                [ARTICLE 2] => 100
                [ARTICLE 4] => 200
            )

        [02] => Array
            (
                [ARTICLE 1] => 30
                [ARTICLE 2] => 40
                [ARTICLE 3] => 30
            )

        [03] => Array
            (
                [ARTICLE 5] => 30
            )

    )

[01] => Array
    (
        [00] => Array
            (
                [ARTICLE 1] => 100
                [ARTICLE 2] => 50
                [ARTICLE 3] => 30
            )

        [01] => Array
            (
                [ARTICLE 1] => 40
                [ARTICLE 2] => 100
                [ARTICLE 4] => 200
            )

        [02] => Array
            (
                [ARTICLE 1] => 30
                [ARTICLE 2] => 40
                [ARTICLE 3] => 30
            )

        [03] => Array
            (
                [ARTICLE 5] => 30
            )

    )

正如您所提到的,我通常处理这种情况的方式是,用一组已知值预先填充每个“外部”元素。 这是在假设您确切知道数组第二维中需要多少个元素,并且事先知道第一维中有多少个元素的前提下进行的。 这是一些代码来演示:

$pageviews = array();
$articles = Array("00", "01", "02", "03");

$prepopulated = Array (
    "Article 1" => 0,
    "Article 2" => 0,
    "Article 3" => 0,
    "Article 4" => 0,
    "Article 5" => 0
);

然后,您可以在导入csv之前创建骨架数组:

foreach ($articles as $article) {
    $pageviews[$article] = $prepopulated;
}

然后,当您从csv导入数据时,您要做的就是覆盖刚创建的骨架数组中的默认值:

if (($handle = fopen("pageviews.csv", "r")) !== FALSE) {
    while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
        $pageviews[$data[0]][$data[1]] = $data[2];
    }
    fclose($handle);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM