0

我在 PHP 中有一个要拆分的字符串。此字符串是数据库中 ID 号的串联。

下面是一个字符串示例,但它可能很长,每个 ID 用“_”分隔:

ID_1_10_11_12

我想将字符串拆分为以下内容:

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”

我想不通。我试过用“_”将原始值分解成一个数组,但这只是让我留下了数字。

我将不胜感激有关如何处理此问题的任何建议。作为参考,这些 ID 写入复选框的类值,以便父值和子值可以分组,然后由 jquery 函数操作。

4

2 回答 2

1

可能不是最优雅的方式,如果少于 2 个 ID,它会中断,但这将返回您要求的字符串:

$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)在 the 之前添加一个for以检查在 之后是否有少于 2 个数组元素,ID并退出打印$new_str没有空格的函数,trim($new_str)如果输入少于 2 个 ID 数组是一个问题。

编辑:修剪左边的空白。

于 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 回答