2016-03-19 11 views
1

У меня есть список строк данных, как так:строка массива в том же порядке, PHP

Category(1,2,"some text"); 
post(111,233,"post"); 
post(111,233,"post"); 
post(111,233,"post"); 
Category(1,2,"some text"); 
post(111,233,"post"); 
post(111,233,"post"); 
post(111,233,"post"); 
post(111,233,"post"); 
post(111,233,"post"); 

Мне нужно преобразовать это в массив в том же порядке, некоторые вещи, как это, например:

Array 
(
[0] => Array 
    (
     ['category'] => Category(1,2,"some text") 
     ['posts'] => Array 
       (
        [0] => post(111,233,"post") 
        [1] => post(111,233,"post") 
        [2] => post(111,233,"post") 
       ) 
    ) 
[2] => Array 
    (
     ['category'] => Category(1,2,"some text") 
     ['posts'] => Array 
       (
        [0] => post(111,233,"post") 
        [1] => post(111,233,"post") 
        [2] => post(111,233,"post") 
        [3] => post(111,233,"post") 
        [4] => post(111,233,"post") 
       ) 
    ) 
) 

я мог бы получить массив Категории один и массив сообщений в одиночку, но как я могу соединить их в один массив в том же порядке ..

preg_match_all("/(category)\(+(.*?)\)/",$string,$cats , PREG_SET_ORDER); 
preg_match_all("/(post)\(+(.*?)\)/",$string,$posts , PREG_SET_ORDER); 

print_r($cats); 
print_r($posts); 

Спасибо

ответ

0

Вы можете разметить строку, а затем разобрать каждый элемент по одному, как это:

$result = array(); 
$token_list = explode(";\n",$string); 
$category_counter = -1;//index trick for the first occorrence of Category 

foreach($token_list as $token){ 
    if(substr($token,0,8) == "Category"){ 
    $category_counter++; 
    $result[$category_counter]["category"] = $token; 
    }else{ 
    $result[$category_counter]["posts"][] = $token; 
    } 
} 
+0

Спасибо Джованни, почти там, я думаю, что единственная проблема, я не могу получить SUBSTR ($ token, 0,1) вправо, он не возвращает «Категория», когда я попробовал его вручную, он вернул «1»! .. Я пытаюсь понять, в чем проблема, спасибо большое – Ahmad

+0

извините, это настраивали "категория", но состояние не работает, я получил массив как: категория массива ( [-1] => массив ( [сообщение] => массив ( [0] => Категория (1,2, «некоторый текст») [1] => пост (111,233, «post») [2] => post (111,233, «post») [3] = > Категория (1,2, «некоторый текст») [4] => post (111,233, «post») [5] => post (111,233, «post») [6] => post (111,233, «post») – Ahmad

+0

Является ли ваша строка такой, я имею в виду, с теми же case-sensitivenes и новыми строками после точки с запятой? ' $ string = 'Категория (1,2," некоторый текст "); почта (111,233, «post»); почта (111,233, «post»); почта (111,233, «post»); Категория (1,2, «некоторый текст»); почта (111,233, «post»); почта (111,233, «post»); почта (111,233, «post»); почта (111,233, «post»); post (111,233, "post"); '; ' –

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