内联到关联数组php

时间:2016-06-09 11:35:57

标签: php arrays associative

我有这种模式

  

组1&安培; 12345,约翰] www.johnsite.com,千斤顶] www.jacksite.com,亚历] www.alexsite.com,豪] www.jorgesite.com,票据] www.billsite.com,罗伯特] WWW .robertsite.com ^组2&安培; 78954,约翰] www.johnsite.com,千斤顶] www.jacksite.com,亚历] www.alexsite.com,豪] www.jorgesite.com,票据] www.billsite.com,罗伯特] www.robertsite.com

我希望将模式分解为像这样的关联数组

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'
    }
}}

并像这样回应它(不显示组代码和成员网站地址)

  

Group1:john-jack-alex-jorge-bill-robert
  第2组:john-jack-alex-jorge-bill-robert

3 个答案:

答案 0 :(得分: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;
}

使用此功能可以分解您的数据。

$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);

结果:

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
            )

    )

)

答案 1 :(得分:0)

使用array_mapexplodeimplodearray_slicepreg_replace函数的解决方案:

// 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;
}

输出:

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

答案 2 :(得分: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);

结果: -

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