0

分割したい文字列がPHPにあります。この文字列は、データベースのID番号を連結したものです。

文字列の例を以下に示しますが、各IDが「_」で区切られていると非常に長くなる可能性があります。

ID_1_10_11_12

文字列を次のように分割したいと思います。

ID_1_10_11_12

ID_1_10_11

ID_1_10

ID_1

次に、それらを順番を逆にしてスペースで区切った新しい文字列に連結します。

新しい文字列="ID_1ID_1_10 ID_1_10_11 ID_1_10_11_12"

私はこれを理解することはできません。元の値を「_」で配列に分解しようとしましたが、数字だけが残ります。

これにどのように取り組むべきかについてアドバイスをいただければ幸いです。参考までに、これらのIDはチェックボックスのクラス値に書き込まれるため、親と子の値をグループ化して、jquery関数で操作できます。

4

2 に答える 2

1

おそらく最もエレガントな方法ではなく、IDが2つ未満の場合は機能しなくなりますが、これにより、要求した文字列が返されます。

$str = "ID_1_10_11_12";

//creates an array with all elements
$arr = explode("_", $str);

$new_str = ' ID_' . $arr[1];
for ($i=2; $i<count($arr); $i++)
{
    $tmp =  explode(" ", $new_str);
    $new_str .= " " . $tmp[$i-1] . "_" . $arr[$i];
}
$new_str = trim($new_str);

echo $new_str; //echoes ID_1 ID_1_10 ID_1_10_11 ID_1_10_11_12

使い勝手はあまりわかりませんが、どうぞ。

次に、単純explode(" ", $new_str)に、その文字列内のすべての要素を含む配列を作成します。これにより、必要な方法で横切ることができます。

もちろん、のif (count($arr) < 3)前にaを追加して、forの後に2つ未満の配列要素があるかどうかを確認し、2つ未満のID配列の入力が問題になる場合は、空白なしでID印刷する関数を終了することもできます。$new_strtrim($new_str)

編集:左の空白をトリミングしました。

于 2012-05-12T03:42:02.360 に答える
0

私のテストローカルサーバーはこれを確認するためにダウンしていますが、これは機能すると思います。

<?php
/*

ID_1_10_11_12
ID_1_10_11
ID_1_10
ID_1

ID_1 ID_1_10 ID_1_10_11 ID_1_10_11_12

*/
$str = "ID_1_10_11_12";
$delim = "_";
$spacer = " ";
$ident = "ID";
$out = "";

// make an array of the IDs
$idList = explode($delim, $str);

// loop through the array
for($cur = 0; $cur >= count($idList); $cur++){
    // reset the holder
    $hold = $ident;

    // loop the number of times as the position beyond 0 we're at
    for($pos = -1; $pos > $cur; $pos++){

        // add the current id to the holder
        $hold .= $delim . $idList[$cur]; // "ID_1"
    }

    // add a spacer and the holder to the output if we aren't at the beginning,
    //      otherwise just add the holder
    $out .= ($cur != 0 ? $spacer . $hold : $hold); // "ID_1 ID_1_10"
}
// output the result
echo $out;

?>
于 2012-05-12T04:10:52.137 に答える