0

このような文字列があり、これ1-male,2-female を次のような配列として作成したい

array(
    1 => male,
    2 => female
);

foreach Exを使用してこれを作成できます:

$str1 = '1-male,2-female';
$outPutArr = array();
$arr1 = explode(',' $str1);
foreach($arr1 as $str2){
    $arr2 = explode('-', $str2);
    $outPutArr[$arr2[0]] = $arr2[1];
}

これを行うための他のショートカットはありますか?

4

2 に答える 2

7

単純な正規表現を使用して、次のpreg_match_allように簡略化できます。

preg_match_all('/(\d+)-([^,]+)/', $input, $matches);
$array = array_combine($matches[1], $matches[2]);

array_combineそれを次のように混ぜます:

Array
(
    [1] => male
    [2] => female
)

別の一般的なアプローチはparse_str()、 afterstrtr()を利用して、文字列の区切り文字を=andに置き換えること&です。

于 2013-07-15T20:25:12.190 に答える
1

私はそれをテストしていませんが、これはおそらくうまくいくはずです。これは、より多くのオプションを提供するための別の方法です。

$String = "1-male,2-female";
$Array = array();
foreach (array_chunk(explode(array('-', ','), $String), 2) as $Ar)
  $Array[$Ar[0]] = $Ar[1];

使い方:

データを次の形式の配列に分割します。

array('1', 'male', '2', 'female')

それが爆発の目的です。次に、次のように 2 つのチャンクに再配置します。

array(array('1', 'male'), array('2', 'female'))

最後に、foreach で、各配列を最初の要素 (キー) と 2 番目の要素 (値) にマージします。

array('1' => 'male', '2' => 'female')

配列キーが繰り返されると、値が上書きされることに注意してください。

于 2013-07-15T20:43:30.053 に答える