2013-12-13 3 views
1

У меня есть строка, которая выглядит следующим образом:Разбиение строки в массив PHP

$dash_access = "1-10:rw,14:rw|10-10:ro,14:ro"; 

Моя цель, чтобы разбить эту строку вверх в массив. Я думаю, что я рядом, но не могу понять. Я хочу, чтобы структура массива выглядела так:

$array = Array 
       (
       [1] => Array 
        (
        [10] => rw 
        [14] => rw 
        ) 
       [10] => Array 
        (
        [10] => ro 
        [14] => ro 
        ) 
       ) 

Это то, что у меня есть до сих пор, но оно не работает.

$dash_access_split = explode("|",$dash_access); 
for ($a=0;$a<count($dash_access_split);$a++) { 
    $split1 = explode("-", $dash_access_split[$a]); 
    $split2 = explode(",", $split1[1]);    
    for ($b=0;$b<count($split2);$b++) {    
    $split3 = explode(":", $split2[$b]);    
    $dash_access_array[$split1[0]][] = $split3[0]; 
    $dash_access_array[$split1[0]][] = $split3[1]; 
    } 
} 
+0

Некоторый код будет хорошо с вопросом. – Achrome

+0

@AshwinMukhija да, мой плохой, там есть код. – DanielOlivasJr

+1

Будет ли строка всегда содержать одни и те же символы? Я вижу, что вы уже используете explode, но сильно взрываются в динамической строке, где разделитель может измениться. – James

ответ

3

Подумайте об этом, как обрушив печенье. Разбейте его на постепенно меньшие части и обработайте каждую деталь соответственно.

Что-то, как это должно работать

$dashAccess = "1-10:rw,14:rw|10-10:ro,14:ro"; 
$outArray = []; 

foreach (explode('|', $dashAccess) as $bigPiece) { 
    list($medKey, $medPiece) = explode('-', $bigPiece); 
    $outArray[$medKey] = []; 
    foreach (explode(',', $medPiece) as $smallPiece) { 
     list($crumbleKey, $crumblePiece) = explode(':', $smallPiece); 
     $outArray[$medKey][$crumbleKey] = $crumblePiece; 
    } 
} 

var_dump($outArray); 

Вот fiddle

+0

не работает для меня. – DanielOlivasJr

+0

Запустите скрипку, чтобы увидеть ее в действии. Кроме того, если вы используете PHP <5.4, то используйте 'array()' вместо '[]' – Achrome

+0

Да, сэр! Понял! Спасибо чувак. – DanielOlivasJr

0
<?php $dash_access = "1-10:rw,14:rw|10-10:ro,14:ro"; 
$big_array=explode('|',$dash_access); 
$small_array=array(); 
foreach($big_array as $key=>$value) 
{ 
    $small_array[]=explode('-',$value); 
    foreach($small_array as $key => $value) 
    { 
     $chunk=explode(',',$value[1]); 
     foreach($chunk as $value1) 
     { 
      $chunk_small=explode(':',$value1); 
      $result[$value[0]][$chunk_small[0]]=$chunk_small[1]; 
     } 
    } 
} 
print_r($result); 

http://codepad.org/sKZyDu2m

Смежные вопросы