Разделите строку в массив и установите разделитель как ключ

У меня есть строка данных как таковая.

$str = "abc/text text def/long amount of text ghi/some text" 

У меня есть массив моих разделителей

 $arr = array('abc/', 'def/', 'ghi/', 'jkl/'); 

Что я могу сделать, чтобы получить этот результат?

 Array ( [abc/] => text text [def/] => long amount of text [ghi/] => some text ) 

Также обратите внимание, что все значения в $ arr могут не всегда отображаться в $ str. Я просто заметил, что это проблема после использования кода из @rohitcopyright ниже.

Вместо этого вы можете использовать preg_split

 $text = "abc/text text def/long amount of text ghi/some text"; $output = preg_split( "/(abc\/|def\/|ghi)/", $text); var_dump($output); 

Вывод:

 array(4) { [0]=> string(0) "" [1]=> string(10) "text text " [2]=> string(20) "long amount of text " [3]=> string(10) "/some text" } 

Обновление: (удалите пустой элемент и переиндексируйте)

 $output = array_values(array_filter(preg_split( "/(abc\/|def\/|ghi)/", $text))); var_dump($output); 

вывод:

 array(3) { [0]=> string(10) "text text " [1]=> string(20) "long amount of text " [2]=> string(10) "/some text" } 

DEMO.

Обновление: (26-е место, 2013 год)

 $str = "abc/text text def/long amount of text ghi/some text"; $array = preg_split( "/([az]{3}\/)/", $str, null, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE); $odd = $even = array(); foreach($array as $k => $v) { if ($k % 2 == 0) $odd[] = $v; else $even[] = $v; } $output = array_combine($odd, $even); print_r($output); 

Вывод:

 Array ( [abc/] => text text [def/] => long amount of text [ghi/] => some text ) 

DEMO.

Обновление: (26-е место, 2013 год)

Вы можете попробовать это также (только измените следующую строку, чтобы получить результат, о котором вы упоминали в комментарии)

 $array = preg_split( "/([a-zA-Z]{1,4}\/)/", $str, null, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE); 

DEMO.

 Try this you will get the exact output as you want. $con='abc/text text def/long amount of text ghi/some text'; $newCon = explode('/', $con); array_shift($newCon); $arr = array('abc/', 'def/', 'ghi/'); foreach($newCon as $key=>$val){ $newArrStr = str_replace("/", "", $arr[$key+1]); $newVal = str_replace($newArrStr, "", $newCon[$key]); $newArray[$arr[$key]] = $newVal; } print_r($newArray);