首页 > 解决方案 > 我正在做一个 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

我究竟做错了什么?

标签: phpsplitpreg-split

解决方案


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
)

推荐阅读