2016-10-14 2 views
0

У меня есть много ссылок:PHP сравнить несколько строку

http://exmpale.com/abc/exmpale.html 
http://exmpale.com/abc/exmpale1.html 
http://exmpale.com/abc/exmpale2.html 
http://exmpale.com/abc/exmpale/exmpale1.html 
http://exmpale.com/abc/exmpale/exmpale2.html 
http://exmpale.com/abc/exmpale/exmpale3.html 
http://exmpale.com/abcd/exmpale1.html 
http://exmpale.com/abcd/exmpale2.html 
http://exmpale.com/abcd/exmpale2.html 
http://exmpale.com/abcd/exmpale4.html 
http://exmpale.com/abc/abc/exmpale1.html 
http://exmpale.com/abc/abc/exmpale2.html 
http://exmpale.com/abc/abc/exmpale3.html 
http://exmpale.com/abc/abc/exmpale4.html 
http://exmpale.com/abc/abc/exmpale5.html 

Я использую PHP, я хочу, чтобы получить все ссылки, как http://exmpale.com/abc/(*).html и перечислить его в массиве. Извините, я забыл код. код пользователя

$a = array(
    0 => 'http://exmpale.com/abc/exmpale.html', 
    1 => 'http://exmpale.com/abc/exmpale1.html', 
    2 => 'http://exmpale.com/abc/exmpale2.html', 
    3 => 'http://exmpale.com/abc/exmpale/exmpale1.html', 
    4 => 'http://exmpale.com/abc/exmpale/exmpale2.html', 
    5 => 'http://exmpale.com/abc/exmpale/exmpale3.html', 
    6 => 'http://exmpale.com/abcd/exmpale1.html', 
    7 => 'http://exmpale.com/abcd/exmpale2.html', 
    8 => 'http://exmpale.com/abcd/exmpale2.html', 
    9 => 'http://exmpale.com/abcd/exmpale4.html', 
    10 => 'http://exmpale.com/abc/abc/exmpale1.html', 
    11 => 'http://exmpale.com/abc/abc/exmpale2.html', 
    12 => 'http://exmpale.com/abc/abc/exmpale3.html', 
    13 => 'http://exmpale.com/abc/abc/exmpale4.html', 
    14 => 'http://exmpale.com/abc/abc/exmpale5.html', 
); 

foreach($a as $k => $v){ 
    $abc = preg_match_all('/http\:\/\/exmpale\.com\/abc\/(.*?)\.html/',$v,$b); 
    print_r($b[1]); 
} 

и я хочу получить результат.

$result = array(
    'http://exmpale.com/abc/exmpale.html', 
    'http://exmpale.com/abc/exmpale1.html', 
    'http://exmpale.com/abc/exmpale2.html'); 

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

+0

Я предлагаю вам взгляните на циклы и подстрочные функции. Начните искать документацию, начните использовать Google для этого. Затем запустите свой собственный скрипт, попытайтесь решить это самостоятельно. _Then_, если вы столкнетесь с проблемой _specific_ с вашим собственным кодом, _then_ - это время, чтобы спросить здесь и разместить свой код внутри вопроса. Мы здесь не для того, чтобы твоя работа для тебя. Мы здесь, чтобы помочь вам в выполнении вашей работы. – arkascha

+0

извините, я напишу код для меня – phuochq

ответ

1

Просто используйте функцию php preg_match_all, и соответствующая строка будет загружена в массив, который вы передадите вышеуказанной функции в качестве аргумента. Пожалуйста, прочитайте руководство по PHP на preg_match_all и создайте регулярное выражение для ваших нужд. Вы можете проверить свои регулярные выражения here

+0

Я использую функцию preg_match_all, но результат не нравится – phuochq

0

Поскольку вы не обеспечивают то, что такая структура данных URL-адреса сохраняются, я предполагаю, что это обычная строка:

$data_raw = "http://exmpale.com/abc/exmpale.html 
http://exmpale.com/abc/exmpale1.html 
http://exmpale.com/abc/exmpale2.html 
http://exmpale.com/abc/exmpale/exmpale1.html 
http://exmpale.com/abc/exmpale/exmpale2.html 
http://exmpale.com/abc/exmpale/exmpale3.html 
http://exmpale.com/abcd/exmpale1.html 
http://exmpale.com/abcd/exmpale2.html 
http://exmpale.com/abcd/exmpale2.html 
http://exmpale.com/abcd/exmpale4.html 
http://exmpale.com/abc/abc/exmpale1.html 
http://exmpale.com/abc/abc/exmpale2.html 
http://exmpale.com/abc/abc/exmpale3.html 
http://exmpale.com/abc/abc/exmpale4.html 
http://exmpale.com/abc/abc/exmpale5.html"; 

$urls = explode("\n", $data_raw); 

$accept_host = "exmpale.com"; 
$accept_path = "/abc/"; 

$filtered_urls = array_filter($urls, function($url) use($accept_host, $accept_path) { 
    $parts = parse_url($url); 
    return $parts['host'] == $accept_host 
     && strpos($parts['path'], $accept_path) === 0 
     && strpos($parts['path'], '/', strlen($accept_path)) === false; 
}); 

printf("<pre>%s</pre>", print_r($filtered_urls, true)); 

Урожайность:

Array 
(
    [0] => http://exmpale.com/abc/exmpale.html 
    [1] => http://exmpale.com/abc/exmpale1.html 
    [2] => http://exmpale.com/abc/exmpale2.html 
) 
+0

спасибо. но данные в строке, и я хочу получить результат http://exmpale.com/abc/exmpale.html,http://exmpale.com/abc/exmpale1.html и http://exmpale.com/abc/exmpale2. html – phuochq

+0

Я понимаю, что вы хотите, чтобы каждый URL был разделен запятой. Посмотрите на обновление. – msfoster

+0

Я только что видел ваше обновление. В результате вы запрашиваете массив '$ filters_urls'. Вы пробовали код? – msfoster