1

I have below string and want to create multidimensional array using unique value

 $string = 'test.jpg|test1.jpg|^22##29##p-test.jpg^22##29##test.video^22##30##p-test2.jpg^22##30##p-test3.jpg^22##30##test4.jpg^22##31##p-CCA_Nestea.jpg^22##31##p-test3.jpg|^24##32##p-test3.jpg^24##32##p-test3.jpg^24##33##p-test3.jpg|test1.jpg';

So I have tried below code but not working

$string = 'test.jpg|test1.jpg|^22##29##p-test.jpg^22##29##test.video^22##30##p-test2.jpg^22##30##p-test3.jpg^22##30##test4.jpg^22##31##p-test22.jpg^22##31##p-test3.jpg|^24##32##p-test3.jpg^24##32##p-test3.jpg^24##33##p-test3.jpg|test1.jpg';
$content_arr = explode("|", $string);
global $db;
$arr1 = array(); $p =0;$prev_layout ='';
foreach($content_arr as $arr){
    if(strpos($arr, '^') !== false) {           
        $l_data = explode("^",$arr);
        $larr = array();
        foreach ($l_data as $l) {
            if(strpos($l, '##') !== false) {        
                $p = explode("##",$l);

                $l_name = 'test lay';

                $p_name = 'test pame';
                if(!in_array($prev_layout,$p_arr)){
                    $p_arr = array();                   
                    $p_arr['l_id'] =$p[0];
                    $p_arr['l_name'] =$l_name;
                    $p_arr['l_interval'] ='';
                }
                $p_arr['panel'][$p++] = array('p_id'=>$p[1],'p_name'=>$p_name,'p_interval'=>'','p_element'=>$p[2]); 
                if($p_arr['layout_id'] != $p[0])
                //if(!in_array($prev_layout,$p_arr, true)){
                    array_push($arr1,$p_arr);
                //}
                if (substr($p[2], -6) != '.video') {
                    $c++;
                }
                $prev_layout = $p[0];
            }
        }       
    }
}

?>

OUTPUT would be

[0] => Array
        (
            [l_id] => 22
            [l_name] => test Menu
            [l_interval] => 
            [panel] => Array
                (
                    [0] => Array
                        (
                            [p_id] => 29
                            [p_name] => Left
                            [p_interval] => 
                            [p_element] =>   [0] => Array
                                             (
                                             [0] => test.jpg,
                                             [1] => test1.jpg
                                             )
                        )


                )

        )
2
  • so you want above given output?? what about Creative_Holidays_Bali.video and p-test3.jpg and other strings??? Commented Apr 28, 2015 at 8:59
  • 2
    Can you please explain the logic inside your output ? Commented Apr 28, 2015 at 9:00

1 Answer 1

1

I have tried your code and modify that is it correct According to your estimated output?

$string = 'test.jpg|test1.jpg|^22##29##p-test.jpg^22##29##test.video^22##30##p-test2.jpg^22##30##p-test3.jpg^22##30##test4.jpg^22##31##p-test22.jpg^22##31##p-test3.jpg|^24##32##p-test3.jpg^24##32##p-test3.jpg^24##33##p-test3.jpg|test1.jpg';
$arr1 =$p_arr= array(); $p =0;$prev_layout ='';
$content_arr = array_filter(explode("|", $string));
global $db;
foreach($content_arr as $arr){
    if(strpos($arr, '^') !== false) {
        $larr = array();
        $l_data = array_filter(explode("^",$arr));
        foreach ($l_data as $l) {
            if(strpos($l, '##') !== false) {
                 $l_name = 'test lay'; $p_name = 'Left';//'test pame';
                 $p=array();
                $p = explode("##",$l); 
                $p0 = $p[0];
                $p1 = $p[1];
                unset($p[0]);unset($p[1]);
                if(!array_key_exists($p0,$p_arr)){
                    $p_arr[$p0] =   array('l_id'=>$p0,
                                          'l_name'=>$l_name,
                                          'l_interval'=>'','panel'=>array());
                }
                if(!array_key_exists($p1,$p_arr[$p0]['panel'])){
                    $p_arr[$p0]['panel'][$p1] = array('p_id'=>$p1,'p_name'=>$p_name,'p_interval'=>'','p_element'=>array(array_values($p)));
                }else{
                    $p_arr[$p0]['panel'][$p1]['p_element'][] = array_values($p);
                  //$p_arr[$p0]['panel'][$p1]['p_element'] = array_merge($p_arr[$p0]['panel'][$p1]['p_element'],array_values($p));//if you want to mearge array 
                }

            }
        }
    }
}
print_r($p_arr);die;

And Out put of that is

Array
(
    [22] => Array
        (
            [l_id] => 22
            [l_name] => test lay
            [l_interval] => 
            [panel] => Array
                (
                    [29] => Array
                        (
                            [p_id] => 29
                            [p_name] => Left
                            [p_interval] => 
                            [p_element] => Array
                                (
                                    [0] => Array
                                        (
                                            [0] => p-test.jpg
                                        )

                                    [1] => Array
                                        (
                                            [0] => test.video
                                        )

                                )

                        )

                    [30] => Array
                        (
                            [p_id] => 30
                            [p_name] => Left
                            [p_interval] => 
                            [p_element] => Array
                                (
                                    [0] => Array
                                        (
                                            [0] => p-test2.jpg
                                        )

                                    [1] => Array
                                        (
                                            [0] => p-test3.jpg
                                        )

                                    [2] => Array
                                        (
                                            [0] => test4.jpg
                                        )

                                )

                        )

                    [31] => Array
                        (
                            [p_id] => 31
                            [p_name] => Left
                            [p_interval] => 
                            [p_element] => Array
                                (
                                    [0] => Array
                                        (
                                            [0] => p-test22.jpg
                                        )

                                    [1] => Array
                                        (
                                            [0] => p-test3.jpg
                                        )

                                )

                        )

                )

        )

    [24] => Array
        (
            [l_id] => 24
            [l_name] => test lay
            [l_interval] => 
            [panel] => Array
                (
                    [32] => Array
                        (
                            [p_id] => 32
                            [p_name] => Left
                            [p_interval] => 
                            [p_element] => Array
                                (
                                    [0] => Array
                                        (
                                            [0] => p-test3.jpg
                                        )

                                    [1] => Array
                                        (
                                            [0] => p-test3.jpg
                                        )

                                )

                        )

                    [33] => Array
                        (
                            [p_id] => 33
                            [p_name] => Left
                            [p_interval] => 
                            [p_element] => Array
                                (
                                    [0] => Array
                                        (
                                            [0] => p-test3.jpg
                                        )

                                )

                        )

                )

        )

)
Sign up to request clarification or add additional context in comments.

3 Comments

@Bhumi Shah is this Answer is Suitable your output?
no it is not proper, you can 29 have only two values.
@BhumiShah Now it according to your expected o/p. If you want to merge 'p_element' arrays then replace 'p_element'=>array(array_values($p)) to 'p_element'=>array_values($p) and un-comment 'array_merge' line ,than make comment above line

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.