【问题标题】:Use array_splice() to enter empty values when the array has non-numeric keys [duplicate]当数组具有非数字键时,使用 array_splice() 输入空值[重复]
【发布时间】:2015-09-11 13:56:34
【问题描述】:

我查看了this question,但似乎无法让代码用于我的目的。

我有一个结构类似的数组 ($array),其中包含来自数据库的数据:

array(369) {
    array(3) {
        ["id"] => string(5) "12345",
        ["title"] => string(11) "Hello World",
        ["description"] => string(n) "..."
    }
    array(3) {
        ["id"] => string(5) "12346",
        ["title"] => string(13) "Goodbye World",
        ["description"] => string(n) "..."
    }
    ...
}

但是,这个数组数据将创建一个 CSV,我还需要插入空列。因此我需要数组最终看起来像这样:

array(369) {
    array(5) {
        ["id"] => string(5) "12345",
        ["title"] => string(11) "Hello World",
        ["title2"] => string(0) "",
        ["description"] => string(n) "...",
        ["description2"] => string(0) ""
    }
    array(5) {
        ["id"] => string(5) "12346",
        ["title"] => string(13) "Goodbye World",
        ["title2"] => string(0) "",
        ["description"] => string(n) "...",
        ["description2"] => string(0) ""
    }
    ...
}

我尝试使用array_splice() 在相关点输入空白值:

array_splice($array, 2, 0, "");
array_splice($array, 4, 0, "");

但这最终只会破坏数组,后来使用fputcsv() 的代码甚至无法将其识别为 数组。如何输入这些空白值?

foreach ($array as $value) {
    fputcsv($fp, $value);
}

请注意:数组key 标记为什么无关紧要。可以是上面建议的,空白、数字、零……重要的是我需要一个空白value

【问题讨论】:

  • 您是否尝试过对每个数组项进行简单循环,以这种方式附加空白元素?或者,您可以将这些列包含在 MySQL 选择查询中,即使它们不存在于原始表中。类似SELECT *, "" as description1 FROM table_name WHERE condition_stuff
  • 一个巧妙的技巧,通过查询拉取不存在的列!

标签: php arrays array-splice


【解决方案1】:
$array = array_map(function (array $row) {
    static $default = [
        'id' => null,
        'title' => null,
        'title2' => null,
        'description' => null,
        'description2' => null
    ];
    return array_merge($default, $row);
}, $array);

array_merge 保留第一个数组的结构(键和顺序),但替换键与第二个数组匹配的任何值。

【讨论】:

  • 5.3+ 用于匿名回调,5.4+ 用于短数组语法[]。换句话说:任何非古代 PHP 版本。
  • @SeanBright 不,他们应该更新他们的 PHP 版本!
  • 对于仍然需要写array()的任何人:对一年前不支持[]的最后一个版本的支持已用完,对引入[]的版本的支持刚刚结束... ;P
  • 谢天谢地,如果您不能升级,您不必升级,您只需将 [...] 符号更改为 array(...) 即可。
  • 是的,好主意。像魅力一样工作。
猜你喜欢
  • 2013-03-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多