我可以将这种格式的数组拆分成这个吗?

时间:2017-05-01 07:47:22

标签: php

如何在PHP中进行以下更改?

输入:

[hiddenAllPrefered] => Array
(
    [0] => 14477,14478,14479,14485,14486,14487
)

输出应该是这样的:

[hiddenAllPrefered] => Array
(
    [0] => 14477,14478,14479
    [1] => 14485,14486,14487
)

2 个答案:

答案 0 :(得分:0)

尝试将其作为样板

function chunker($arr, $l) { 
  return array_chunk($arr, $l); 
}
print_r(chunker($hap, 3));
/*
Array
(
    [0] => Array
        (
            [0] => 14477
            [1] => 14478
            [2] => 14479
        )

    [1] => Array
        (
            [0] => 14485
            [1] => 14486
            [2] => 14487
        )

)
*/

<强>更新

php > $h = [ "14477,14478,14479,14485,14486,14487" ];
php > $hap = explode(",", $h[0]);
php > print_r($hap);
Array
(
    [0] => 14477
    [1] => 14478
    [2] => 14479
    [3] => 14485
    [4] => 14486
    [5] => 14487
)
php > print_r(chunker($hap, 3));
Array
(
    [0] => Array
        (
            [0] => 14477
            [1] => 14478
            [2] => 14479
        )

    [1] => Array
        (
            [0] => 14485
            [1] => 14486
            [2] => 14487
        )

)
php > 

答案 1 :(得分:0)

可能的解决方案:

$input = array('14477,14478,14479,14485,14486,14487');

$output = array_map(
    function (array $a){
        return implode(',', $a);
    },
    array_chunk(
        explode(',', $input[0]),
        3
    )
);

从里到外阅读:

  • explode()使用逗号($input[0])作为分隔符拆分字符串,并返回一个数组;
  • array_chunk()将数组拆分为大小为3的块;它返回一个数组数组,每个内部数组包含3个元素(除了最后一个可以包含更少的元素);
  • array_map()将它接收的函数作为其第一个参数应用于它获取的数组的每个值作为其第二个参数(由array_chunk()返回的数组数组);它返回一个数组,其值是函数返回的值;
  • 传递给array_map()的{​​{3}}获取一个数组(大小为3或更少)并使用implode()将其元素连接成一个字符串,使用逗号({{ 1}})分隔值并返回字符串;
  • ,将匿名函数返回的所有值(数组中每个array_map()元素的一个)放入一个它返回的新数组中。

输出(3)如下所示:

print_r($output)