将键值前置到数组 - PHP

时间:2015-12-22 10:45:19

标签: php arrays

我在for..loop中有以下代码有没有办法可以将值添加到数组的开头?

    $data = array();

    $initial = strtotime('11:00:00');
    for (; $initial < strtotime("23:00:59");  $initial = strtotime("+15 minutes", $initial)) {
        if ($initial > strtotime("+45 minutes", time())) {
            $row['value'] = date('Hi', $initial);
            $row['label'] = date('H:i', $initial);
            $data['data'][] = $row;
        }
    }

我想将以下值添加到数组的顶部。我尝试过使用array_unshift,但我认为它不支持键值对。

    if(!isBetween('22:00', '09:59', date('H:i'))) {
        $row['value'] = "asap";
        $row['label'] = "ASAP";
    }

我的数组输出

{
  "data": [
    {
      "value": "1145",
      "label": "11:45"
    }
  ]
}

我想得到这个

{
  "data": [
    {
      "value": "asap",
      "label": "ASAP"
    },{
      "value": "1145",
      "label": "11:45"
    },
  ]
}

2 个答案:

答案 0 :(得分:3)

如果正确传递参数,则取消移位应该有效:

array_unshift($data["data"], $prepend);

或者,您可以使用array_merge,如下所示:

$data["data"] = array_merge(array($prepend), $data["data"]);

使用以下示例数据:

$data = [
    "data" => [
        [
            "value" => "1145",
            "label" => "11:45"
        ]
    ]
];

$prepend = [
    "value" => "asap",
    "label" => "ASAP"
];

$data["data"] = array_merge(array($prepend), $data["data"]);
print_r($data);

您将获得此输出(使用两种解决方案):

Array (
    [data] => Array (
            [0] => Array (
                    [value] => asap
                    [label] => ASAP
                )
            [1] => Array (
                    [value] => 1145
                    [label] => 11:45
                )
        )
)

答案 1 :(得分:0)

如果你需要在没有重新索引键和/或需要预先设置键值对的情况下为数组添加一些东西,你可以使用这个短函数:

function array_unshift_assoc(&$arr, $key, $val) { 
    $arr = array_reverse($arr, true); 
    $arr[$key] = $val; 
    return = array_reverse($arr, true); 
} 

来源:http://php.net/manual/en/function.array-unshift.php