-2

I have this pattern

group1&12345,john]www.johnsite.com,jack]www.jacksite.com,alex]www.alexsite.com,jorge]www.jorgesite.com,bill]www.billsite.com,robert]www.robertsite.com^group2&78954,john]www.johnsite.com,jack]www.jacksite.com,alex]www.alexsite.com,jorge]www.jorgesite.com,bill]www.billsite.com,robert]www.robertsite.com

I want explode the pattern to associative array like this

ARRAY => {
[0] => 'GROUP1' {
    [0] => '12345',
    [1] => {
        [0] => 'john]www.johnsite.com',
        [1] => 'jack]www.jacksite.com',
        [2] => 'alex]www.alexsite.com',
        [3] => 'jorge]www.jorgesite.com',
        [4] => 'bill]www.billsite.com',
        [5] => 'robert]www.robertsite.com'
    }
},
[1] => 'GROUP2' {
    [0] => '78954',
    [1] => {
        [0] => 'john]www.johnsite.com',
        [1] => 'jack]www.jacksite.com',
        [2] => 'alex]www.alexsite.com',
        [3] => 'jorge]www.jorgesite.com',
        [4] => 'bill]www.billsite.com',
        [5] => 'robert]www.robertsite.com'
    }
}}

and echo it like this (dont display group code and members website address)

Group1 : john-jack-alex-jorge-bill-robert
Group2 : john-jack-alex-jorge-bill-robert

rap-2-h
  • 30,204
  • 37
  • 167
  • 263
PHP
  • 49
  • 3

3 Answers3

0
function data_explode($data){

  $result = array();
  $explodeArray = explode("^",$data);
  foreach($explodeArray as $key => $value){

     $explodeInnerArray = explode(",",$value);
     foreach($explodeInnerArray as $valueInner){
       if (substr( $valueInner, 0, 5 ) === "group"){
         $result[] = explode("&",$valueInner);
       } else {
         $tempArray[] = $valueInner;
       }
    }
   $result[$key][2] = $tempArray;
  }

return $result;
}

Use this function to explode your data.

$data = "group1&12345,john]www.johnsite.com,jack]www.jacksite.com,alex]www.alexsite.com,jorge]www.jorgesite.com,bill]www.billsite.com,robert]www.robertsite.com^group2&78954,john]www.johnsite.com,jack]www.jacksite.com,alex]www.alexsite.com,jorge]www.jorgesite.com,bill]www.billsite.com,robert]www.robertsite.com";
$result = data_explode($data);

Result:

Array
(
[0] => Array
    (
        [0] => group1
        [1] => 12345
        [2] => Array
            (
                [0] => john]www.johnsite.com
                [1] => jack]www.jacksite.com
                [2] => alex]www.alexsite.com
                [3] => jorge]www.jorgesite.com
                [4] => bill]www.billsite.com
                [5] => robert]www.robertsite.com
            )

    )

[1] => Array
    (
        [0] => group2
        [1] => 78954
        [2] => Array
            (
                [0] => john]www.johnsite.com
                [1] => jack]www.jacksite.com
                [2] => alex]www.alexsite.com
                [3] => jorge]www.jorgesite.com
                [4] => bill]www.billsite.com
                [5] => robert]www.robertsite.com
                [6] => john]www.johnsite.com
                [7] => jack]www.jacksite.com
                [8] => alex]www.alexsite.com
                [9] => jorge]www.jorgesite.com
                [10] => bill]www.billsite.com
                [11] => robert]www.robertsite.com
            )

    )

)
Sibiraj PR
  • 1,481
  • 1
  • 10
  • 25
0

The solution using array_map, explode, implode, array_slice and preg_replace functions:

// supposing $text is your initial text content

$result = array_map(function($v){
    $items = explode("&", $v);
    $rest = explode(",", $items[1]);
    return [
        ucfirst($items[0]) => [
            0 => $rest[0],
            1 => array_slice($rest, 1)
        ]
    ];
}, explode("^",$text));

//print_r($result);  // will output the resulting array

foreach ($result as $group) {
    $key = key($group);
    echo $key . " : " .implode("-", preg_replace("/\].+/","",$group[$key][1])). PHP_EOL;
}

The output:

Group1 : john-jack-alex-jorge-bill-robert
Group2 : john-jack-alex-jorge-bill-robert
RomanPerekhrest
  • 88,541
  • 4
  • 65
  • 105
0
$var="group1&12345,john]www.johnsite.com,jack]www.jacksite.com,alex]www.alexsite.com,jorge]www.jorgesite.com,bill]www.billsite.com,robert]www.robertsite.com^group2&78954,john]www.johnsite.com,jack]www.jacksite.com,alex]www.alexsite.com,jorge]www.jorgesite.com,bill]www.billsite.com,robert]www.robertsite.com";
$levelOne=explode("^",$var);
$finalGroupArr=array();
$finalGroupNameText=array();
foreach($levelOne as $k=>$v){
        $levelTwo=explode(",",$v);
        if(isset($levelTwo[0])){
            $groupArr=explode("&",$levelTwo[0]);
            array_shift($levelTwo);
            $finalGroupArr[$k]=array($groupArr[0]=>array(0=>$groupArr[1],1=>$levelTwo));
            foreach($levelTwo as $v2){
                $tempArr=explode("]",$v2);
                $nameArr[]=$tempArr[0];
            }
            $finalGroupNameText[]=$groupArr[0].": ".implode("-",$nameArr);
            unset($nameArr);
        }
        unset($levelTwo);

}
//For associative array you can use $finalGroupArr
echo "<pre>";print_r($finalGroupArr);
//For name print you can use following variable...
echo implode("<br/>",$finalGroupNameText);

Result:-

Array
(
    [0] => Array
        (
            [group1] => Array
                (
                    [0] => 12345
                    [1] => Array
                        (
                            [0] => john]www.johnsite.com
                            [1] => jack]www.jacksite.com
                            [2] => alex]www.alexsite.com
                            [3] => jorge]www.jorgesite.com
                            [4] => bill]www.billsite.com
                            [5] => robert]www.robertsite.com
                        )

                )

        )

    [1] => Array
        (
            [group2] => Array
                (
                    [0] => 78954
                    [1] => Array
                        (
                            [0] => john]www.johnsite.com
                            [1] => jack]www.jacksite.com
                            [2] => alex]www.alexsite.com
                            [3] => jorge]www.jorgesite.com
                            [4] => bill]www.billsite.com
                            [5] => robert]www.robertsite.com
                        )

                )

        )

)
group1: john-jack-alex-jorge-bill-robert
group2: john-jack-alex-jorge-bill-robert