Question

I need to change a two-dimensional array to a three-dimensional array irrespective of the lengths of the array:

I have the following:

array(89) { 
    [0]=> array(5) { [0]=>"aaa" [1]=>"bbb"[2]=>"ccc" [3]=>"ddd" [4]=>"eee" } 
    [1]=> array(5) { [0]=>"blablabla" [1]=>"blablabla" [2]=>"blablabla" [3]=>"blablabla" [4]=>"blablabla" }
    [2]=> array(5) { [0]=>"aaa" [1]=>"bbb"[2]=>"ccc" [3]=>"ddd" [4]=>"eee" } 
    [3]=> array(5) { [0]=>"blablabla" [1]=>"blablabla" [2]=>"blablabla" [3]=>"blablabla" [4]=>"blablabla" }
    [4]=> array(5) { [0]=>"blablabla" [1]=>"blablabla" [2]=>"blablabla" [3]=>"blablabla" [4]=>"blablabla" }
...}

I need

array (?) {   
    [0]=> array(2) { 
        [0]=> array(5) { [0]=>"aaa" [1]=>"bbb"[2]=>"ccc" [3]=>"ddd" [4]=>"eee" }   
        [1]=> array(5) { [0]=>"blablabla" [1]=>"blablabla" [2]=>"blablabla" [3]=>"blablabla" [4]=>"blablabla" }}
    [1]=> array(3) { 
        [0]=> array(5) { [0]=>"aaa" [1]=>"bbb"[2]=>"ccc" [3]=>"ddd" [4]=>"eee" }  
        [1]=> array(5) { [0]=>"blablabla" [1]=>"blablabla" [2]=>"blablabla" [3]=>"blablabla" [4]=>"blablabla" }
        [2]=> array(5) { [0]=>"blablabla" [1]=>"blablabla" [2]=>"blablabla" [3]=>"blablabla" [4]=>"blablabla" }}
    ...}

'blablabla' can be any length and format, but 'aaa', 'bbb', ... is the same in all arrays. need to array begins with 'aaa'

Was it helpful?

Solution

This is quite simple actually, all you need is one foreach():

$i=-1; //this will increment on first loop so we set it to -1
$key_to_find = $array[0][0]; //storing the 'aaa' value
$result = array();       
foreach($array as $key=>$val){
    //checking if 'aaa' equals to the first value, if yes increment $i to 0
    ($val[0]==$key_to_find)?$i++:'';
    //save the whole array bunch
    $result[$i][] = $val;
}

print_r($result);

DEMO

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top