如何将数组重新分配到某个"形状"的另一个数组中.PHP

mat*_*att 6 php arrays

我有一系列库存(ITEMS A&B)

A和B项目以1 x A和2 x B的形式出售.

这些项目还具有各种属性,这些属性不会影响它们如何分配到集合中.

例如:

$inventory=array(
array("A","PINK"),
array("A","MAUVE"),
array("A","ORANGE"),
array("A","GREY"),
array("B","RED"),
array("B","BLUE"),
array("B","YELLOW"),
array("B","GREEN"),  
array("B","BLACK")  
);
Run Code Online (Sandbox Code Playgroud)

我想重新分配数组$ inventory以创建$ set(s)

$set[0] => Array
                (
                    [0] => array(A,PINK)
                    [1] => array(B,RED)
                    [2] => array(B,BLUE)

                )

$set[1] => Array
                (
                    [0] => array(A,MAUVE)
                    [1] => array(B,YELLOW)
                    [2] => array(B,GREEN)

                )

$set[2] => Array
                (
                    [0] => array(A,ORANGE)
                    [1] => array(B,BLACK)
                    [2] => NULL

                )

$set[3] => Array
                (
                    [0] => array(A,GREY)
                    [1] => NULL
                    [2] => NULL

                )
Run Code Online (Sandbox Code Playgroud)

如你看到的.这些项目按照它们在清单中的显示顺序重新分配,以创建一组1 x A和2 x B.创建集合时颜色无关紧要.但是我需要能够找到在创建$ set数组之后进入哪个颜色的颜色.创建集直到所有库存都用完为止.如果库存项目不存在以进入集合,则会插入NULL值.

提前致谢!

cod*_*ict 1

我假设一切都A's在一切之前B's

$inventory=array(
                array("A","PINK"),
                array("A","MAUVE"),
                array("A","ORANGE"),
                array("A","GREY"),
                array("B","RED"),
                array("B","BLUE"),
                array("B","YELLOW"),
                array("B","GREEN"),  
                array("B","BLACK")  
                );

for($b_start_index = 0;$b_start_index<count($inventory);$b_start_index++) {
        if($inventory[$b_start_index][0] == 'B') {
                break;
        }
}

$set = array();
for($i=0,$j=$b_start_index;$i!=$b_start_index;$i++,$j+=2) {
        isset($inventory[$j])?$temp1=$inventory[$j]:$temp1 = null;
        isset($inventory[$j+1])?$temp2=$inventory[$j+1]:$temp2 = null;
        $set[] = array( $inventory[$i], $temp1, $temp2);                                                                                                                                                       
}
Run Code Online (Sandbox Code Playgroud)