我正在做一个 preg_split 但只获得数组的第二个值的值 - PHP

有了这段代码,我试图在“//”中拆分一个字符串,但它只给了我在 $splits[1] 上的值,而在 $splits[0] 上什么也没给我。


while($row = $result->fetch_assoc()) {

        $amigos[] = $row["Id2"]."//".$row["ID"];

    }


    foreach ($amigos as $i => $value) {

        $splits = preg_split("//", $value);

        $IDAmizade = $splits[0];

        $IDAmigo = $splits[1];

        $sql = "SELECT `Nome`,`Agrupamento` FROM `Users` WHERE `ID`='$IDAmigo'";

        $result = $conn->query($sql);

        $row = $result->fetch_assoc();

        echo($row["Nome"] . "+" . $row["Agrupamento"] . "+". $IDAmizade . "/");

    }

是的 $_row["Id2"] 正在返回一个我已经确认的数字。


我要拆分的字符串就像:“1//3”,拆分后它给了我 splits[0] 什么都没有, splits[1] 是 3


我究竟做错了什么?


杨魅力
浏览 114回答 3
3回答

尚方宝剑之说

0 索引为空的原因是因为在这部分中使用preg_splitpreg_split("//",时,第一个参数是/用作分隔符的正则表达式,因此您将字符串拆分为空字符串。$pattern = "//";$string = "1//3";print_r(preg_split($pattern, $string));输出Array(    [0] =>     [1] => 1    [2] => /    [3] => /    [4] => 3    [5] => )如果您想使用 preg_split with/作为分隔符并拆分,//则必须转义正斜杠。$pattern = "/\/\//";如果您使用另一个分隔符,例如~模式看起来像$pattern = "~//~";正如已经指出的,您可以使用explode代替$string = "1//3";print_r(explode("//", $string));输出Array(    [0] => 1    [1] => 3)

茅侃侃

您需要更改 preg_split 模式。您目前所做的会将字符串拆分为其组成字符。所以$splits = preg_split("//", $value);应该:$splits = preg_split("[//]", $value);在此处查看有关 preg_split的更多信息,并在此处查看有关正则表达式的更多信息。或者,您可以使用explode,它将一个字符串拆分为另一个字符串。$splits = explode("//", $value);

catspeake

正如评论中所说,为什么你有 2 个循环?一个就足够了,您不需要拆分字符串:while($row = $result->fetch_assoc()) {    $sql = "SELECT `Nome`,`Agrupamento` FROM `Users` WHERE `ID`='" . $row["ID"] . "'";    $result2 = $conn->query($sql);    $row2 = $result2->fetch_assoc();    echo($row2["Nome"] . "+" . $row2["Agrupamento"] . "+". $row["Id2"] . "/");}此外,您最好使用 JOIN 而不是在循环中执行第二个 SELECT 。我不能说更多,因为我们不知道数据库的架构以及数据库是什么。
打开App,查看更多内容
随时随地看视频慕课网APP