【问题标题】:Insert default values in duplicated array key/values在重复的数组键/值中插入默认值
【发布时间】:2014-01-11 23:59:07
【问题描述】:

我有一个以这种方式构造的 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

我在我的 php 代码中导入 csv,并将内容插入到多维数组中。当我 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;

}

有人可以帮忙吗?

更新

我试过这样的

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
            )

    )

【问题讨论】:

  • 如果您提供一些我们可以实际复制/粘贴来尝试的代码(例如真正的数组而不是 var_dump 输出),那将是一个更好的问题。并解释你到目前为止尝试了什么,什么没有奏效;您当前的代码并没有做太多...

标签: php arrays csv multidimensional-array


【解决方案1】:

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

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

【讨论】:

  • 问题是我无法提前知道在数组的第二维中显示的次数,我不知道第一维中有多少元素。 }
  • 啊。我将更新答案以包含一个更通用的方法来确定元素的范围。
猜你喜欢
  • 2020-09-21
  • 2021-04-12
  • 2013-01-14
  • 2015-10-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-20
相关资源
最近更新 更多