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'

Était-ce utile?

La 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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top