Я делаю preg_split, но только получить значение на втором значении массива - PHP - PullRequest
1 голос
/ 04 марта 2020

С помощью этого кода я пытаюсь разбить строку в «//», но он дает мне только значение для $ split [1] и для $ split [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 "и после разделения это дает мне сплиты [0] - ничто и сплиты [1] - 3

что я делаю неправильно?

Ответы [ 3 ]

1 голос
/ 04 марта 2020

Причина, по которой индекс 0 пуст, заключается в том, что при использовании preg_split в этой части preg_split("//", первым аргументом является регулярное выражение, которое использует / в качестве разделителя, поэтому вы разбиваете строку на пустое string.

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

Выходные данные

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

Если вы хотите использовать preg_split с / в качестве разделителя и разделить на //, вам нужно бежать the forward sla sh.

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

Если бы вы использовали другой разделитель, такой как ~, рисунок был бы похож на

$pattern = "~//~";

Как уже указывалось, вы могли бы используйте взорваться вместо

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

Вывод

Array
(
    [0] => 1
    [1] => 3
)
0 голосов
/ 04 марта 2020

Как сказано в комментарии, почему у вас 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 в l oop. Я не могу сказать больше, потому что мы не знаем схему базы данных и что это за база данных.

0 голосов
/ 04 марта 2020

Вам нужно изменить шаблон preg_split. То, что вы делаете в данный момент, разделит строку на составляющие ее символы.

Итак

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

Должно быть:

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

Подробнее о preg_split здесь и больше о регулярных выражениях здесь .

В качестве альтернативы вы можете использовать explode , который разбивает строку на другую строку.

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