3

私はそのようなデータの文字列を持っています。

$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のコードを使用した後、これが問題であることに気づきました。

4

2 に答える 2

3

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"
}

デモ。

更新 : (2013 年 9 月 26 日)

$str = "abc/text text def/long amount of text ghi/some text";
$array = preg_split( "/([a-z]{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 
)

デモ。

更新 : (2013 年 9 月 26 日)

これも試すことができます(コメントで言及した結果を達成するために次の行のみを変更してください)

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

デモ。

于 2013-09-25T04:43:12.417 に答える
0
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);
于 2013-09-25T05:29:08.210 に答える