У меня есть этот образец
группа 1&12345, джон] www.johnsite.com, домкрат] www.jacksite.com, Алекс] www.alexsite.com, хорх] www.jorgesite.com, счет] www.billsite.com, роберт] www.robertsite.com ^ group2&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'
}
}}
и повторить это так (не отображать код группы и адрес веб-сайта участников)
Группа1: Джон-Джек-Алекс-Джордж-Билл-Роберт
Группа 2: Джон-Джек-Алекс-Джордж-Билл-Роберт
Решение с использованием array_map
, explode
, implode
, array_slice
а также preg_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
$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
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
)
)
)