次のコードでphpのexplodeを使用する
$data="test_1, test_2, test_3";
$temp= explode(",",$data);
私はこのような配列を取得します
array('0'=>'test_1', '1'=>'test_2', 2='test_3')
爆発した後に欲しいもの
array('1'=>'test_1', '2'=>'test_2', 3='test_3')
あなたはこのようなものをすることができます:
$temp = array_combine(range(1, count($temp)), array_values($temp));
を使用array_combine()
して、既存の値を使用して配列を作成し(を使用してarray_values()
)、range()
1から配列のサイズまでの新しい範囲を作成します
配列のインデックスは0から始まります。本当に配列を1から始めたい場合は、それを分解して、インデックスが1から始まるように定義された別の配列にコピーできますが、なぜですか?
あなたはおそらくこれを使うことができます(テストされていません)
$newArray=array_unshift($temp,' ');
unset($newArray[0]);
explodeを使用することは不可能です。
for($i = count($temp) - 1; $i >= 0; $i--)
$temp[$i + 1] = $temp[$i];
unset($temp[0]);
あなたはそれを直接行うことはできませんでしたが、これはあなたが求めていることを行います:
$temp=explode(',',',' . $data);
unset($temp[0]);
var_dump($temp);
array(3) {
[1]=>
string(6) "test_1"
[2]=>
string(7) " test_2"
[3]=>
string(7) " test_3"
}
Lloyd Watkinの答えは、期待される結果を達成するための関数呼び出しを最小限に抑えます。これは、ストリングが分解された後、ワンライナーで4つの関数を使用するManseUKの方法に対する確かに優れた答えです。
この質問はほぼ5年前なので、誰かが今チャイムをする勇気があるなら、追加する価値のあるものがあるはずです...
対処すべきことが2つあります。
OPとLloydWatkinsはどちらも、サンプル文字列に基づいてexplodeメソッドに正しい区切り文字を割り当てることができません。区切り文字は、コンマの後にスペースを続ける必要があります。
サンプル入力:
$data="test_1, test_2, test_3";
ロイドの2機能アプローチに一致するワンライナーソリューションを提供した人は誰もいません。これが:(デモ)
$temp=array_slice(explode(", ",", $data"),1,null,true);
この2つの機能を持つ1つのライナーは、$data
文字列の前にコンマとスペースを追加してから展開します。次に、最初の空の要素を無視し、キー()を保持したままarray_slice
、2番目の要素(1
)から最後( )に戻ります。null
true
必要に応じて出力:
array(
1 => 'test_1',
2 => 'test_2',
3 => 'test_3',
)