我正在执行preg_split,但仅获取数组第二个值的值-PHP

问题描述 投票:0回答:3

虽然此代码我试图在“ //”中分割字符串,但是它只给我$ 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

我在做什么错?

php split preg-split
3个回答
0
投票

您需要更改preg_split模式。您目前正在执行的操作会将字符串分成其组成字符。

所以

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

应该是:

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

请参阅有关preg_split here的更多信息,以及有关正则表达式here的更多信息。

或者,您可以使用explode,将一个字符串除以另一个字符串。

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

0
投票

之所以0索引为空是因为在此部分preg_split中使用preg_split("//",时,第一个参数是使用/作为分隔符的正则表达式,因此您将字符串拆分为空字符串。

$pattern = "//";
$string = "1//3";
print_r(preg_split($pattern, $string));

输出

Array
(
    [0] => 
    [1] => 1
    [2] => /
    [3] => /
    [4] => 3
    [5] => 
)

如果要使用preg_split和/作为delimiter并在//上分割,则必须转义正斜杠。

$pattern = "/\/\//";

[如果您要使用像~这样的另一个定界符,则模式将看起来像]

$pattern = "~//~";

正如已经指出的,您可以改用explode

$string = "1//3";
print_r(explode("//", $string));

输出

Array
(
    [0] => 1
    [1] => 3
)

0
投票

如评论所述,为什么会有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。我不能多说,因为我们不知道数据库的架构以及什么是数据库。

© www.soinside.com 2019 - 2024. All rights reserved.