0

たとえば、次の文字列があるとします。

$stuff = "[1379082600-1379082720],[1379082480-1379082480],[1379514420-1379515800],";

これを実行して、次のような配列に分割できることはわかっています。

$stuff = str_replace(array("[","]"),array("",""),$stuff);
$stuff = explode(",",$stuff);

しかし、文字列はすでにほとんど配列形式になっているため、もっと簡単な方法があるようです。もっと簡単な方法はありますか?

4

5 に答える 5

3

文字列はすでにほとんど配列形式になっているためです。

そうではない。文字列と配列は、プログラミング言語に関してはまったく異なるものです。

もっと簡単な方法はありますか?

「もっと簡単な方法」を探しても意味がありません。あなたが今持っている方法はすでにかなり簡単です。

于 2013-09-13T14:59:19.667 に答える
1

[]で中に入ることができますpreg_match_all。以下を試してください:

preg_match_all("/\[(.*?)\]/",$stuff, $matches);

$matches[1] の出力

array (size=3)
  0 => string '1379082600-1379082720' (length=21)
  1 => string '1379082480-1379082480' (length=21)
  2 => string '1379514420-1379515800' (length=21)
于 2013-09-13T15:17:58.957 に答える
0

正規表現ベースのソリューションを使用すると、他の方法よりも遅くなり、効率が低下します。

「関数呼び出しが少ない」ことを意味する「より単純」を検討している場合は、preg_split()またはをお勧めします。ただし、変数をグローバルスコープに追加する必要はなくpreg_match_all()、説明したいと思います。また、多次元配列を生成し、単に 1 次元の配列が必要です。これは のもう 1 つの利点です。preg_match_all()preg_split()preg_match_all()preg_split()

ここにオプションのバッテリーがあります。一部は私のもので、一部は他の人が投稿したものです。うまくいくものもあれば、うまくいくものもあれば、うまくいかないものもあります。教育の時間だ…

$stuff = "[1379082600-1379082720],[1379082480-1379082480],[1379514420-1379515800],";
// NOTICE THE TRAILING COMMA ON THE STRING!

// my preg_split() pattern #1 (72 steps):
var_export(preg_split('/[\],[]+/', $stuff, 0, PREG_SPLIT_NO_EMPTY));

// my preg_split() pattern #2 (72 steps):
var_export(preg_split('/[^\d-]+/', $stuff, 0, PREG_SPLIT_NO_EMPTY));

// my preg_match_all pattern #1 (16 steps):
var_export(preg_match_all('/[\d-]+/', $stuff, $matches) ? $matches[0] : 'failed');  

// my preg_match_all pattern #2 (16 steps):
var_export(preg_match_all('/[^\],[]+/', $stuff, $matches) ? $matches[0] : 'failed');

// Bora's preg_match_all pattern (144 steps):
var_export(preg_match_all('/\[(.*?)\]/', $stuff, $matches) ? $matches[0] : 'failed');

// Alex Howansky's is the cleanest, efficient / correct method
var_export(explode('],[', trim($stuff, '[],')));

// Andy Gee's method (flawed / incorrect -- 4 elements in output)
var_export(explode(",", str_replace(["[","]"], "", $stuff)));

// OP's method (flawed / incorrect -- 4 elements in output)
$stuff = str_replace(["[", "]"], ["", ""], $stuff);
$stuff = explode(",", $stuff);
var_export($stuff);

メソッドのデモンストレーションをご覧になりたい場合は、ここをクリックしてください

歩数を確認したい場合は、このパターンのデモをクリックして、私が提供したパターンを交換してください。

于 2017-08-04T00:47:59.177 に答える