Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/278.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 根据值的数量将数组拆分为组合_Php_Arrays - Fatal编程技术网

Php 根据值的数量将数组拆分为组合

Php 根据值的数量将数组拆分为组合,php,arrays,Php,Arrays,根据值的数量将以下数组拆分为不同组合的最佳方法是什么 [0] => 1 [1] => 5 [2] => 4 [3] => 1 [4] => Array ( [0] => 1 [1] => 9 ) To [0] => 1 [1] => 5 [2] => 4 [3] => 1 [4] => 1 AND [0] => 1 [1] => 5 [2] =>

根据值的数量将以下数组拆分为不同组合的最佳方法是什么

[0] => 1
[1] => 5
[2] => 4
[3] => 1
[4] => Array
    (
        [0] => 1
        [1] => 9
    )
To

[0] => 1
[1] => 5
[2] => 4
[3] => 1
[4] => 1

  AND 

[0] => 1
[1] => 5
[2] => 4
[3] => 1
[4] => 9
函数getCombinations($arr){ $ret=array(); $subs=array(); //提取子数组 $n=计数($arr); 对于($i=0;$i$i,'values'=>$arr[$i],'size'=>count($arr[$i]),'counter'=>0); $arr[$i]=null; } } $subs\u n=计数($subs); 如果($subs\u n==0)//未找到子数组,则返回输入 返回$arr; $finished=false; 而(!$finished){ $combination=$arr;//这将复制现有阵列 对于($i=0;$i=$subs[$i]['size']){//如果组合结束,则增加下一级 $carry=true; $subs[$i]['counter']=0; }否则{ $carry=false; } $i++; 如果($i>=$subs\u n&&$carry){//如果达到最后一个组合,则全部完成 $finished=true; $carry=false; } } } 返回$ret; }
我会选择这样的方式:

<?php

$arr = [
0 => 1,
1 => 5,
2 => 4,
3 => 1,
4 => [
        0 => 1,
        1 => 9,
    ]
];


$arr = [
    0 => null,
    1 => $arr,
];

function split_array($a) {
    $ended = true;
    $new_line = [];
    $rem_line = [];

    $last_line = array_pop($a);

    foreach ($last_line as $k=>$v){
        if ( is_array( $v ) ) {
            $new_v = array_shift($v);           
            if ( count($v) > 0 ) {
                $rem_v = $v;
                $ended = false;
            } else {
                $rem_v = $new_v;
            }
        } else {
            $new_v = $v;
            $rem_v = $v;
        }
        $new_line[] = $new_v;
        $rem_line[] = $rem_v;
    }

    $a[] = $new_line;
    if ( ! $ended ) {
        echo 'not ended';
        $a[] = $rem_line;
        $a = split_array($a);
    }


    return $a;
}

array_shift($arr);

echo '<pre>';
print_r( split_array($arr) );
echo '</pre>';

到目前为止,您是否尝试编写一些内容?子数组是否在输入数组中出现多次?我尝试了foreach循环的一些内容,但它变得越来越复杂。@Manueloto是的,它们可以。请查看。在发布问题之前,您应该已经研究了您的问题,并尝试自己编写代码。如果您在某个特定的问题上遇到困难,请将您尝试过的内容和相关代码的摘要包含在文档中,以便我们可以帮助您解决问题。
<?php

$arr = [
0 => 1,
1 => 5,
2 => 4,
3 => 1,
4 => [
        0 => 1,
        1 => 9,
    ]
];


$arr = [
    0 => null,
    1 => $arr,
];

function split_array($a) {
    $ended = true;
    $new_line = [];
    $rem_line = [];

    $last_line = array_pop($a);

    foreach ($last_line as $k=>$v){
        if ( is_array( $v ) ) {
            $new_v = array_shift($v);           
            if ( count($v) > 0 ) {
                $rem_v = $v;
                $ended = false;
            } else {
                $rem_v = $new_v;
            }
        } else {
            $new_v = $v;
            $rem_v = $v;
        }
        $new_line[] = $new_v;
        $rem_line[] = $rem_v;
    }

    $a[] = $new_line;
    if ( ! $ended ) {
        echo 'not ended';
        $a[] = $rem_line;
        $a = split_array($a);
    }


    return $a;
}

array_shift($arr);

echo '<pre>';
print_r( split_array($arr) );
echo '</pre>';