php взорваться и foreach восстанавливает только одну петлю - PullRequest
0 голосов
/ 03 апреля 2020

Я не очень профессионален, но у меня есть PHP код:

$m = mysqli_query($dblink,"select * from bot where type='movie' and ID ='$wait'");
while($a = mysqli_fetch_array($m, MYSQLI_ASSOC)){

    $ex = explode(",",$a["links"]);
    preg_match_all('/\b(https?|ftp|file):\/\/[-A-Z0-9+&@#\/%?=~_|$!:,.;]*[A-Z0-9+&@#\/%=~_|$]/i',  $ex[1], $matches);
    $urls = $matches[0];
    foreach($urls as $url){
        $s=size($url); 
    }
    preg_match_all('/\b(https?|ftp|file):\/\/[-A-Z0-9+&@#\/%?=~_|$!:,.;]*[A-Z0-9+&@#\/%=~_|$]/i', $ex[1], $matches2);
    $urls2 = $matches2[0]; 
}

, и у меня также есть http://site1.com,http://site2.com,http://site3.com в моем столбце "ссылок" базы данных.

, поэтому здесь это моя проблема: код показывает только один из сайтов. Мне было интересно, если проблема в foreach или взорваться или не из них?

спасибо всем заранее!

РЕДАКТИРОВАТЬ: поэтому я изменил свой код на это :

$ex = explode(",",$a["links"]);

$url=$a["links"];
foreach($ex as $url){
    $s=size($url); 
    ...
}

и, похоже, проблема с $url, потому что когда я использую пользовательский URL, например http://test.com вместо $url, он работает и показывает мне 3 ссылки, которые являются числом ссылки в моей базе данных с URL http://test.com. Что я делаю не так с $url?

1 Ответ

1 голос
/ 03 апреля 2020
 $ex = explode(",",$a["links"]);

Возвращает массив значений (ссылок) следующим образом:

$ex[0] = 'http://site1.com'
$ex[1] = 'http://site2.com'
$ex[2] = 'http://site3.com'

И вы передаете только вторую позицию массива (index = 1 => $ ex [1]) на следующую строку

preg_match_all('/\b(https?|ftp|file):\/\/[-A-Z0-9+&@#\/%?=~_|$!:,.;]*[A-Z0-9+&@#\/%=~_|$]/i',  $ex[1], $matches);

, поэтому вы можете сделать это:

foreach($ex as $url) {
    preg_match_all('/\b(https?|ftp|file):\/\/[-A-Z0-9+&@#\/%?=~_|$!:,.;]*[A-Z0-9+&@#\/%=~_|$]/i',  $url, $matches);
}

, чтобы получить совпадения для каждого URL в столбце базы данных ссылок

...