虽然此代码我试图在“ //”中分割字符串,但是它只给我$ 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
我在做什么错?
之所以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
)
如评论所述,为什么会有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。我不能多说,因为我们不知道数据库的架构以及什么是数据库。