【问题标题】:Add elements to existing array将元素添加到现有数组
【发布时间】:2015-08-04 13:34:19
【问题描述】:

我有一个看起来像这样的数组

array(3) {
      [0]=>
      array(4) {
        ["sort"]=>
        string(0) ""
        ["day"]=>
        string(2) "2"
        ["month"]=>
        string(1) "8"
        ["year"]=>
        string(4) "2015"
      }
      [1]=>
      array(4) {
        ["sort"]=>
        string(0) ""
        ["day"]=>
        string(1) "5"
        ["month"]=>
        string(1) "8"
        ["year"]=>
        string(4) "2015"
      }
      [2]=>
      array(4) {
        ["sort"]=>
        string(0) ""
        ["day"]=>
        string(1) "9"
        ["month"]=>
        string(1) "8"
        ["year"]=>
        string(4) "2015"
      }
    }

如您所见,它由排序、日期、月份和年份组成。我想将新元素添加到值为“day”+1 的同一数组中。

如果 2015 年 8 月 8 日在数组中,则它还应包括 2015 年 8 月 9 日。 我需要一种方法来提取值、计算新日期并放回所有日期。 结果应如下所示:

array(3) {
          [0]=>
          array(4) {
            ["sort"]=>
            string(0) ""
            ["day"]=>
            string(2) "2"
            ["month"]=>
            string(1) "8"
            ["year"]=>
            string(4) "2015"
          }
          [1]=>
          array(4) {
            ["sort"]=>
            string(0) ""
            ["day"]=>
            string(1) "5"
            ["month"]=>
            string(1) "8"
            ["year"]=>
            string(4) "2015"
          }
          [2]=>
          array(4) {
            ["sort"]=>
            string(0) ""
            ["day"]=>
            string(1) "9"
            ["month"]=>
            string(1) "8"
            ["year"]=>
            string(4) "2015"
          }
          [3]=>
          array(4) {
            ["sort"]=>
            string(0) ""
            ["day"]=>
            string(2) "3"
            ["month"]=>
            string(1) "8"
            ["year"]=>
            string(4) "2015"
          }
          [4]=>
          array(4) {
            ["sort"]=>
            string(0) ""
            ["day"]=>
            string(1) "6"
            ["month"]=>
            string(1) "8"
            ["year"]=>
            string(4) "2015"
          }
          [5]=>
          array(4) {
            ["sort"]=>
            string(0) ""
            ["day"]=>
            string(1) "10"
            ["month"]=>
            string(1) "8"
            ["year"]=>
            string(4) "2015"
          }
        }

理想情况下,它还应该排除新日期,如果数组中已经存在相同的日期。

【问题讨论】:

标签: php arrays


【解决方案1】:

用新项目创建数组并将其与旧数组合并

$temp = array();
foreach($array as $item)
   $temp[] = array_replace($item, array("day" => $item["day"]+1));
$res = array_merge($array, $temp);

排除重复日

$days = array_reduce($array, 
        function($a, $i) { $a[$i['day']] = 1; return $a; ; }, 
        array());

$temp = array();
foreach($array as $item)
   if (! isset($days[$item["day"]+1]))
      $temp[] = array_replace($item, array("day" => $item["day"]+1));
$res = array_merge($array, $temp);

【讨论】:

  • 非常感谢。这完全像我需要的那样工作,但它以 int 形式返回“day”。我如何将其转换为字符串?
  • php 在数字和数字字符串之间没有区别。
  • 我需要使用 javascript 日历的输出。无论如何,我会尝试看看我是否有效
  • 这样写:array("day" => (string) ($item["day"]+1))
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-01-06
  • 1970-01-01
  • 2016-02-19
  • 2015-05-11
  • 1970-01-01
  • 2016-05-17
  • 1970-01-01
相关资源
最近更新 更多