php中的单数组到多维数组

时间:2017-08-08 01:08:05

标签: php arrays multidimensional-array

转换此单个数组的简单方法是什么:

Array(
[0] => 1.1
[1] => 1.2
[2] => 1.3
[3] => 2.1
[4] => 2.2
[5] => 2.3
[6] => 3.1
[7] => 3.2
)

进入像这样的多维数组:

Array
(
[1] => Array
    (
        [1] => 1.1
        [2] => 1.2
        [3] => 1.3
    )

[2] => Array
    (
        [1] => 2.1
        [2] => 2.2
        [3] => 2.3
    )

[3] => Array
    (
        [1] => 3.1
        [2] => 3.2
    )
)

行数和列数可以更改(由用户输入),单元格内部与两者的组合相同(如显示)。

7 个答案:

答案 0 :(得分:0)

我会这样做:

<?php
$origArray = array(1.1, 1.2, 1.3, 2.1, 2.2, 2.3, 3.1, 3.2);
$chunkedArray = array_chunk($origArray, 3);
foreach($chunkedArray as $increment => $chunk){
  $resultArray[$increment+1] = $chunk;
}
print_r($resultArray);
?>

答案 1 :(得分:0)

我认为您正在寻找的答案称为array_chunk()。

<?php
$input_array = Array(
[0] => 1.1
[1] => 1.2
[2] => 1.3
[3] => 2.1
[4] => 2.2
[5] => 2.3
[6] => 3.1
[7] => 3.2
)
print_r(array_chunk($input_array, 3));

?>

输出:

Array
(
[1] => Array
    (
        [1] => 1.1
        [2] => 1.2
        [3] => 1.3
    )

[2] => Array
    (
        [1] => 2.1
        [2] => 2.2
        [3] => 2.3
    )

[3] => Array
    (
        [1] => 3.1
        [2] => 3.2
    )
)

http://php.net/manual/en/function.array-chunk.php

答案 2 :(得分:0)

我会使用数组漫游,因为我懒得输入foreach( ..bla.. ..bla.. )

$array = Array(
    '1.1',
    '1.2',
    '1.3',
    '2.1',
    '2.2',
    '2.3',
    '3.1',
    '3.2',
);

$res = [];

array_walk( $array, function($item) use (&$res){
    $key = substr($item, 0,1); //get the first place, this will work up to # 9
    if( isset($res[$key]))
        $res[$key][] = $item;
    else
        $res[$key] = [$item];
});

var_export( $res );

你甚至可以在这里测试它。

http://sandbox.onlinephpfunctions.com/code/0988bc488a732270589106c0ea7738f36e4a9407

输出

array (
  1 => 
  array (
    0 => '1.1',
    1 => '1.2',
    2 => '1.3',
  ),
  2 => 
  array (
    0 => '2.1',
    1 => '2.2',
    2 => '2.3',
  ),
  3 => 
  array (
    0 => '3.1',
    1 => '3.2',
  ),
)

我今天感觉很慷慨,但你应该自己尝试,这是一个微不足道的问题。

如果您想要超过9.,那么您需要使用.这样找到strpos的位置

array_walk( $array, function($item) use (&$res){
    $key = substr($item, 0, (strpos($item,'.'))); 

    if( isset($res[$key]))
        $res[$key][] = $item;
    else
        $res[$key] = [$item];
});

您可以在这里测试一个(我将第一个项目更改为10.1

http://sandbox.onlinephpfunctions.com/code/9a192bf28cd0fb2046e99206a2cf6ac5b2533b3c

答案 3 :(得分:0)

$array = array(1.1,1.2,1.3,2.1,2.2,2.3,3.1,3.2);
$input_size = 3;
$newArray = array();
$newArray = array_chunk($array, $input_size);        
print_r($newArray);

这可能就是你要找的东西。您只需要使用数组块转换它并分配它。

答案 4 :(得分:0)

试试这个:

<?php

$a = [1.1,1.2,1.3,2.1,2.2,2.3,3.1,3.2];   

function newArray($array)
{
    $b = [];
    /* create multidimension array */
    foreach($array as $v){
        $d = (int)floor($v);
        $b[ $d ][] = $v;
    }
    /* re-index child nodes arrays to start from 1 */
    array_walk($b, function(&$item){
        $item = array_combine(range(1, count($item)), array_values($item));
    });
    return $b;
}

$b = newArray($a);

print_r($b);

甚至更简单:

<?php

$a = [1.1, 1.2, 1.3, 2.1, 2.2, 2.3, 3.1, 3.2];   

function newArray2($array)
{
    $b = [];
    $i = $j = 1;
    /* create multidimension array */
    foreach($array as $v){
        $i_ = (int)floor($v);
        if($i_ != $i){
            $j = 1;
            $i = $i_;
        }
        $b[ $i ][ $j ] = $v;
        ++$j;
    }
    return $b;
}

$b = newArray2($a);

print_r($b);

答案 5 :(得分:0)

你可以通过floor()来实现它,它会将整数回到最接近的整数,因为它似乎是你想要的数组的要求,尝试低于你不必要的{{1}数组作为你的元素可能会有所不同所以这里没有元素变化依赖项的数量,并且chunk你想要的数组键以0开头,用下面的一个解决:

array_chunk()

在此处查看上述工作示例https://eval.in/842752

答案 6 :(得分:0)

你应该使用array_chunk($ array,3):

print_r(array_chunk($input_array, 3));

//$input_array is your array which you have defined above