За последние 24 часа нас посетили 62115 программистов и 1678 роботов. Сейчас ищет 831 программист ...

Как преобразовать строку в массив сохранив разделитель?

Тема в разделе "PHP для новичков", создана пользователем servitpol, 22 апр 2017.

  1. servitpol

    servitpol Новичок

    С нами с:
    17 авг 2016
    Сообщения:
    63
    Симпатии:
    3
    Собственно САБЖ!
    Есть данные:
    $str = "
    apple
    green
    red
    yellow

    banana
    green
    yellow

    cherry
    red
    green
    yellow
    ";

    Как из этой строки получить массив вида:
    PHP:
    1. array['apple' =>
    2. 'green
    3. red
    4. yellow',
    5. 'banana' =>
    6. 'green
    7. yellow',
    8. 'cherry' =>
    9. 'red
    10. green
    11. yellow'];
    ??

    Пробовал через
    PHP:
    1. $result = preg_split("/\bapple\b|\bbanana\b|\bcherry\b/", $str);
    Но такой вариант возвращает мне:
    PHP:
    1. array(4) {
    2.   [0]=>
    3.   string(2) "
    4. "
    5.   [1]=>
    6.   string(24) "
    7. green
    8. red
    9. yellow
    10.  
    11. "
    12.   [2]=>
    13.   string(19) "
    14. green
    15. yellow
    16.  
    17. "
    18.   [3]=>
    19.   string(22) "
    20. red
    21. green
    22. yellow
    23. "
    24. }
    Дело в том что у меня в данных может не быть apple или banana, но различать их как-то надо...
     
  2. servitpol

    servitpol Новичок

    С нами с:
    17 авг 2016
    Сообщения:
    63
    Симпатии:
    3
    В общем если кому будет интересно, то решил эту задачу так:
    PHP:
    1. function createNewArray($arr, $keys){
    2.         foreach($arr as $k){
    3.             if(in_array(trim($k), $keys)){
    4.                 $val = trim($k);
    5.                 continue;
    6.             }
    7.             if(trim($k) != '')
    8.             $new_arr[$val][] = trim($k);
    9.         }
    10.     return $new_arr;
    11. }
    12.  
    13. $arr = explode("\n", $str);
    14. $fruits = array('apple', 'cherry', 'banana');
    15. $res = createNewArray($arr, $fruits);
    Получаю:
    Код (Text):
    1. array(3) {
    2.   ["apple"]=>
    3.   array(3) {
    4.     [0]=>
    5.     string(5) "green"
    6.     [1]=>
    7.     string(3) "red"
    8.     [2]=>
    9.     string(6) "yellow"
    10.   }
    11.   ["banana"]=>
    12.   array(2) {
    13.     [0]=>
    14.     string(5) "green"
    15.     [1]=>
    16.     string(6) "yellow"
    17.   }
    18.   ["cherry"]=>
    19.   array(3) {
    20.     [0]=>
    21.     string(3) "red"
    22.     [1]=>
    23.     string(5) "green"
    24.     [2]=>
    25.     string(6) "yellow"
    26.   }
    27. }
     
  3. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.815
    Симпатии:
    1.332
    Адрес:
    Лень
    явное указание ключей в 14 строке, это не выход из ситуации.
     
  4. servitpol

    servitpol Новичок

    С нами с:
    17 авг 2016
    Сообщения:
    63
    Симпатии:
    3
    Почему?Если эти ключи и есть нужный мне разделитель?