За последние 24 часа нас посетили 18629 программистов и 1702 робота. Сейчас ищут 898 программистов ...

Разбор строки!!!

Тема в разделе "PHP для новичков", создана пользователем WHITE_DRAGON, 2 июл 2009.

  1. WHITE_DRAGON

    WHITE_DRAGON Активный пользователь

    С нами с:
    13 апр 2009
    Сообщения:
    65
    Симпатии:
    0
    Адрес:
    Минск
    Есть строка:

    reputations=title:Angels city,dsc:Рыцарь первого круга,img:misc/zn2_1.gif|

    и есть код который разбирает эту строку:

    PHP:
    1. <?
    2.  
    3. if(strpos($fcontents, "reputations")!==false)
    4.  
    5.       {
    6.  
    7.              $fcontents = strtr($fcontents, "|", " ");
    8.  
    9.              $arr = explode("=", $fcontents, 2);
    10.  
    11.              $arr1 = split(",", $arr[1]);
    12.  
    13.              $data[$arr[0]] = array();
    14.  
    15.              for($i=0; $i<count($arr1); $i++)
    16.  
    17.         {
    18.  
    19.                $arr2 = split(":", $arr1[$i]);
    20.  
    21.                $data[$arr[0]][$arr2[0]] = $arr2[1];
    22.  
    23.               }
    24.  
    25.             }
    26.  
    27. ?>
    на:

    echo $data['reputations']['img']; выводит misc/zn2_1.gif

    echo $data['reputations']['dsc'];
    выводит Рыцарь первого круга

    echo $data['reputations']['title'];
    выводит Angels city



    а как разобрать более сложную строчку ввида:

    reputations=title:Angels city,dsc:Рыцарь первого круга,img:misc/zn2_1.gif|title:Capital city,dsc:Рыцарь первого круга,img:misc/zn1_1.gif|title:Demons city,dsc:Рыцарь первого круга,img:misc/zn3_1.gif|title:Emeralds city,dsc:Рыцарь первого круга,img:misc/zn6_1.gif|title:Sandcity,dsc:Рыцарь первого круга,img:misc/zn7_1.gif|title:Алтарь Крови,dsc:Посвященный первого круга,img:misc/znbl_1.gif|title:Храм Знаний,dsc:Посвященный второго круга,img:misc/znrune_2.gif|



    у меня не получается... код который написан выше выводит:

    echo $data['reputations']['img']; выводит znrune_2.gif

    echo $data['reputations']['dsc'];
    выводит Рыцарь первого круга

    echo $data['reputations']['title'];
    выводит Angels city

    т.е. title и dsc из начала строки, а img из конца..., а всё остальное просто исчезает!!!
     
  2. Fduch

    Fduch Активный пользователь

    С нами с:
    1 июл 2009
    Сообщения:
    140
    Симпатии:
    0
    PHP:
    1.  
    2. $fcontents = "reputations=title:Angels city,dsc:Рыцарь первого круга,img:misc/zn2_1.gif|title:Capital city,dsc:Рыцарь первого круга,img:misc/zn1_1.gif|title:Demons city,dsc:Рыцарь первого круга,img:misc/zn3_1.gif|title:Emeralds city,dsc:Рыцарь первого круга,img:misc/zn6_1.gif|title:Sandcity,dsc:Рыцарь первого круга,img:misc/zn7_1.gif|title:Алтарь Крови,dsc:Посвященный первого круга,img:misc/znbl_1.gif|title:Храм Знаний,dsc:Посвященный второго круга,img:misc/znrune_2.gif| ";
    3. $contents = explode ("=", $fcontents);
    4. $new_array = array();
    5. $new_key = '0';
    6. $new_array[$contents[0]]=array();
    7. if (!empty($contents[1]))
    8. {
    9.     $elements = explode ("|", $contents[1]);
    10.     if (!empty($elements))
    11.     {
    12.         foreach ($elements as $key=>$element) if (!empty($element))
    13.         {
    14.             $fields = explode (",", $element);
    15.             $new_array[$contents[0]][$key]=array();
    16.             foreach ($fields as $field)
    17.             {
    18.                 if (!empty($field))
    19.                 {
    20.                     $value = explode (":", $field);
    21.                     $new_array[$contents[0]][$key][$value[0]] = $value[1];
    22.                 }
    23.             }
    24.  
    25.         }
    26.     }
    27. }
    28.  
    и в массиве $new_array имеем
    Код (Text):
    1.  
    2. 0,112565994263
    3. Array
    4. (
    5.     [reputations] => Array
    6.         (
    7.             [0] => Array
    8.                 (
    9.                     [title] => Angels city
    10.                     [dsc] => Рыцарь первого круга
    11.                     [img] => misc/zn2_1.gif
    12.                 )
    13.  
    14.             [1] => Array
    15.                 (
    16.                     [title] => Capital city
    17.                     [dsc] => Рыцарь первого круга
    18.                     [img] => misc/zn1_1.gif
    19.                 )
    20.  
    21.             [2] => Array
    22.                 (
    23.                     [title] => Demons city
    24.                     [dsc] => Рыцарь первого круга
    25.                     [img] => misc/zn3_1.gif
    26.                 )
    27.  
    28.             [3] => Array
    29.                 (
    30.                     [title] => Emeralds city
    31.                     [dsc] => Рыцарь первого круга
    32.                     [img] => misc/zn6_1.gif
    33.                 )
    34.  
    35.             [4] => Array
    36.                 (
    37.                     [title] => Sandcity
    38.                     [dsc] => Рыцарь первого круга
    39.                     [img] => misc/zn7_1.gif
    40.                 )
    41.  
    42.             [5] => Array
    43.                 (
    44.                     [title] => Алтарь Крови
    45.                     [dsc] => Посвященный первого круга
    46.                     [img] => misc/znbl_1.gif
    47.                 )
    48.  
    49.             [6] => Array
    50.                 (
    51.                     [title] => Храм Знаний
    52.                     [dsc] => Посвященный второго круга
    53.                     [img] => misc/znrune_2.gif
    54.                 )
    55.  
    56.             [7] => Array
    57.                 (
    58.                     [ ] =>
    59.                 )
    60.  
    61.         )
    62.  
    63. )
     
  3. WHITE_DRAGON

    WHITE_DRAGON Активный пользователь

    С нами с:
    13 апр 2009
    Сообщения:
    65
    Симпатии:
    0
    Адрес:
    Минск
    Fduch
    Большое спсб!!! Ещё вопросик, а как сделать чтоб key имел неопределённое значение, т.е. не выводить информацию вида echo $new_array['reputations']['0']['title'];, и постоянно прописывать ['0'] ['1'] ['2'] и т.д., а чтоб просто прописать ['знак безконечности'] и оно само выводило если одно значение то одно, два значит два и т.д....???
     
  4. TheShock

    TheShock Активный пользователь

    С нами с:
    30 май 2009
    Сообщения:
    1.255
    Симпатии:
    0
    Адрес:
    Київ
    очень просто
    PHP:
    1. <?
    2. for ($i=0, $c = count($new_array['reputations']); $i<$c; $i++) {
    3.     echo $new_array['reputations'][$i]['title'];
    4. }
    5.  
    6. // или
    7.  
    8. foreach ($new_array['reputations'] as $elem) {
    9.     echo $elem['title'];
    10. }
     
  5. WHITE_DRAGON

    WHITE_DRAGON Активный пользователь

    С нами с:
    13 апр 2009
    Сообщения:
    65
    Симпатии:
    0
    Адрес:
    Минск
    TheShock
    Спсб!!!
     
  6. Kreker

    Kreker Старожил

    С нами с:
    8 апр 2007
    Сообщения:
    5.433
    Симпатии:
    0
    Рыцарь первого круга...
    -)