1
votes

Je fais un preg_split mais j'obtiens seulement une valeur sur la deuxième valeur du tableau - PHP

Avec ce code, j'essaye de diviser une chaîne dans le "//" mais cela ne me donne qu'une valeur sur les $ splits [1] et sur les $ splits [0] ne me donne rien.

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 . "/");
    }

Et oui, le $ _row ["Id2"] renvoie un nombre que je confirme.

La chaîne que j'essaie de diviser est comme: "1 // 3" et après le split ça me donne des splits [0] c'est rien et des splits [1] c'est 3

qu'est-ce que je fais de mal?


1 commentaires

Je dois vous demander pourquoi vous devez faire des boucles? il semble également que SELECT devrait être dans la requête d'origine et utiliser JOIN


3 Réponses :


0
votes

Vous devez changer votre modèle preg_split. Ce que vous faites en ce moment va diviser la chaîne en ses caractères composants.

Donc

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

Devrait être:

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


0 commentaires

1
votes

La raison pour laquelle l'index 0 est vide est que lorsque vous utilisez preg_split dans cette partie preg_split ("//", le premier argument est l'expression régulière qui utilise / comme délimiteur afin que vous divisiez la chaîne sur une chaîne vide.

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

Output

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

Si vous souhaitez utiliser preg_split avec / comme délimiteur et divisé sur // vous devez échapper au barre oblique.

$pattern = "~//~";

Si vous utilisiez un autre délimiteur comme ~ , le modèle ressemblerait à

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

Comme déjà indiqué, vous pouvez utiliser exploser a > à la place

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

Sortie

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


0 commentaires

0
votes

Comme indiqué dans le commentaire, pourquoi avez-vous 2 boucles? Un seul suffit et vous n'avez pas besoin de diviser une chaîne:

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"] . "/");
}

De plus, vous feriez mieux d'utiliser un JOIN au lieu de faire un deuxième SELECT dans la boucle. Je ne peux pas en dire plus car nous ne connaissons pas le schéma de la base de données et ce qu'est la base de données.


0 commentaires