0

次のコードで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')
4

6 に答える 6

2

あなたはこのようなものをすることができます:

$temp = array_combine(range(1, count($temp)), array_values($temp));

を使用array_combine()して、既存の値を使用して配列を作成し(を使用してarray_values())、range()1から配列のサイズまでの新しい範囲を作成します

ここでの実例

于 2012-07-25T13:25:57.620 に答える
1

配列のインデックスは0から始まります。本当に配列を1から始めたい場合は、それを分解して、インデックスが1から始まるように定義された別の配列にコピーできますが、なぜですか?

于 2012-07-25T13:23:21.160 に答える
0

あなたはおそらくこれを使うことができます(テストされていません)

$newArray=array_unshift($temp,' ');
unset($newArray[0]);
于 2012-07-25T13:25:06.750 に答える
0

explodeを使用することは不可能です。

for($i = count($temp) - 1; $i >= 0; $i--) 
    $temp[$i + 1] = $temp[$i];
unset($temp[0]);
于 2012-07-25T13:25:45.447 に答える
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"
}
于 2012-07-25T13:34:00.110 に答える
0

Lloyd Watkinの答えは、期待される結果を達成するための関数呼び出しを最小限に抑えます。これは、ストリングが分解された後、ワンライナーで4つの関数を使用するManseUKの方法に対する確かに優れた答えです。

この質問はほぼ5年前なので、誰かが今チャイムをする勇気があるなら、追加する価値のあるものがあるはずです...

対処すべきことが2つあります。

  1. OPとLloydWatkinsはどちらも、サンプル文字列に基づいてexplodeメソッドに正しい区切り文字を割り当てることができません。区切り文字、コンマの後にスペースを続ける必要があります。

    サンプル入力:

    $data="test_1, test_2, test_3";
    
  2. ロイドの2機能アプローチに一致するワンライナーソリューションを提供した人は誰もいません。これが:(デモ

    $temp=array_slice(explode(", ",", $data"),1,null,true);
    

    この2つの機能を持つ1つのライナーは、$data文字列の前にコンマとスペースを追加してから展開します。次に、最初の空の要素を無視し、キー()を保持したままarray_slice、2番目の要素(1)から最後( )に戻ります。nulltrue

    必要に応じて出力:

    array(
        1 => 'test_1',
        2 => 'test_2',
        3 => 'test_3',
    )
    
于 2017-04-02T12:25:40.663 に答える