Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.78/65: Рейтинг темы: голосов - 65, средняя оценка - 4.78
0 / 0 / 0
Регистрация: 28.06.2014
Сообщений: 48

Preg_match_all() expects parameter 2 to be string, array given

03.07.2014, 10:48. Показов 13545. Ответов 41
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день!

ошибка в коде
PHP
1
2
3
4
5
6
$content = file('http://www.merlion.com/catalog/product/929443/'); //получаем стр
$content = preg_replace("/\s/", " ", $content); //убираем пробелы
$content = str_replace(array("\r","\n"), '', $content); //убираем перенос строки
$result = preg_match_all('/(?<=<div\sclass=\'ad-thumbs\'>)(.)*(?=<div\sclass="product_tab\svisible">)/s', $content, $matches); 
//находим нужный блок и возвращаем его значение
echo $matches;
требует: preg_match_all() expects parameter 2 to be string, array given

в чем дело не пойму - по синтаксису функция верно описана..
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
03.07.2014, 10:48
Ответы с готовыми решениями:

Warning: trim() expects parameter 1 to be string, array given in J:\home\wagure\www\libraries\joomla\html\parameter.php on line 83
// Set base path $this-&gt;_elementPath = dirname( __FILE__ ).DS.'parameter'.DS.'element'; if (trim( $data )) { ...

Explode() expects parameter 2 to be string, array given
Подскажите. Почему не работает explode? explode() expects parameter 2 to be string, array given $names= file('emails.txt'); ...

Warning: trim() expects parameter 1 to be string, array given in
Доброго времени суток! Раньше всё работало,но потом хостер обновил php Проблемма такая Warning: trim() expects parameter 1 to be...

41
Эксперт PHP
 Аватар для Kerry_Jr
3106 / 2591 / 1219
Регистрация: 14.05.2014
Сообщений: 7,236
Записей в блоге: 1
03.07.2014, 10:55
Цитата Сообщение от maia666 Посмотреть сообщение
$content = file('http://www.merlion.com/catalog/product/929443/'); //получаем стр
Функция file() считывает из файла построчно в массив, а функция preg_replace_all() в качестве второго параметра ожидает не массив, а строку. Замените file() на file_get_contents()
0
0 / 0 / 0
Регистрация: 28.06.2014
Сообщений: 48
03.07.2014, 10:56  [ТС]
так я убрала все переносы строк, преобразовав код в строку, должно все корректно работать:

PHP
1
$content = str_replace(array("\r","\n"), '', $content); //убираем перенос строки
file_get_contents() - возвращает содержимое страницы без тегов, а мне нужно с тегами.. именно эту функцию пробовала в начале..)
0
Эксперт PHP
 Аватар для Kerry_Jr
3106 / 2591 / 1219
Регистрация: 14.05.2014
Сообщений: 7,236
Записей в блоге: 1
03.07.2014, 11:10
maia666, еще раз повторяю, функция file() СЧИТЫВАЕТ ФАЙЛ В МАССИВ. А чтобы из массива сделать строку можно воспользоваться функцией implode().
PHP
1
2
3
4
5
6
7
$content = file('http://www.merlion.com/catalog/product/929443/'); //получаем стр
$content = implode(" ", $content);
$content = preg_replace("/\s/", " ", $content); //убираем пробелы
$content = str_replace(array("\r","\n"), '', $content); //убираем перенос строки
$result = preg_match_all('/(?<=<div\sclass=\'ad-thumbs\'>)(.)*(?=<div\sclass="product_tab\svisible">)/s', $content, $matches); 
//находим нужный блок и возвращаем его значение
echo $matches;
0
368 / 406 / 165
Регистрация: 29.05.2014
Сообщений: 1,494
03.07.2014, 11:15
Да что же вы за люди. Там же ясно написано 2 параметр должен быть строкой а дан массив.
0
0 / 0 / 0
Регистрация: 28.06.2014
Сообщений: 48
03.07.2014, 11:18  [ТС]
вы родились со знанием php? люди учатся, это нормально.
0
Эксперт PHP
 Аватар для Kerry_Jr
3106 / 2591 / 1219
Регистрация: 14.05.2014
Сообщений: 7,236
Записей в блоге: 1
03.07.2014, 11:20
maia666, только что проверил, file_get_contents() отлично считывает с тегами. Как Вы проверяли, с тегами считывает или нет?
1
0 / 0 / 0
Регистрация: 28.06.2014
Сообщений: 48
03.07.2014, 11:22  [ТС]
у меня вот так результат выводит
0
Эксперт PHP
 Аватар для Kerry_Jr
3106 / 2591 / 1219
Регистрация: 14.05.2014
Сообщений: 7,236
Записей в блоге: 1
03.07.2014, 11:26
maia666, теперь правой кнопкой мышки клацаем и нажимаем "Просмотреть исходный код" или что-то подобное. Если б не было тегов, на странице не было бы ссылок, заголовков и т.п.
0
0 / 0 / 0
Регистрация: 28.06.2014
Сообщений: 48
03.07.2014, 11:29  [ТС]
так мне дальше надо с этими данными скриптом работать) рег.выражение должно тег найти с указанным классом)))
file_get_contents() - выводит без тегов почему-то
file - выводит с тегами страницу, поэтому эту функцию и взяла за основу...
0
Эксперт PHP
 Аватар для Kerry_Jr
3106 / 2591 / 1219
Регистрация: 14.05.2014
Сообщений: 7,236
Записей в блоге: 1
03.07.2014, 11:32
maia666, Вы выводите в браузер, который распознает теги и не показывает, а обрабатывает их.
0
368 / 406 / 165
Регистрация: 29.05.2014
Сообщений: 1,494
03.07.2014, 11:51
Лучший ответ Сообщение было отмечено maia666 как решение

Решение

Это же парсер чужой страницы, верно?
и ты результат выводишь в браузер
Цитата Сообщение от Kerry_Jr Посмотреть сообщение
echo $matches;
только для того чтобы посмотреть что стянуло, верно?
Так вот чтобы увидеть весь код достаточно поставить
PHP
1
echo htmlspecialchars($matches);
1
0 / 0 / 0
Регистрация: 28.06.2014
Сообщений: 48
03.07.2014, 12:30  [ТС]
перестает работать регулярка, функция preg_match_all возвращает пустое значение.. насколько понимаю проблема в том, что функция implode () преобразует теги, и они перестают отображаться..
смысл вобще скрипта в том, чтобы получить страницу с тегами (в виде строки с кодом) и путем работы регулярных выражений - вытащить нужные данные, которые поместить в строку или массив..

подскажите, пожалуйста, при помощи каких средств это можно сделать? текущий способ не подошел....((
0
368 / 406 / 165
Регистрация: 29.05.2014
Сообщений: 1,494
03.07.2014, 12:33
Да и уж если на то пошло код вообше работать не будет я тут глянул результат первых трёх строчек регулярка по ним не сработает.
PHP
1
2
3
4
5
6
7
8
9
10
$content = file('http://www.merlion.com/catalog/product/929443/'); //получаем стр
$content = preg_replace("/\s/", " ", $content); //убираем пробелы
$content = str_replace(array("\r","\n"), '', $content); //убираем перенос строки
 
$i=1;
foreach($content as $item)
    {
        echo "$i ".htmlspecialchars($item)."<br>";
        $i++;
    }
1
0 / 0 / 0
Регистрация: 28.06.2014
Сообщений: 48
03.07.2014, 13:21  [ТС]
переделала вот так:
PHP
1
2
3
4
5
$content = file('http://www.merlion.com/catalog/product/929443/'); //получаем стр
$content = implode("\n\r", $content);
$result = htmlspecialchars ($content);
$result = preg_match_all('/(?<=<div\sclass=\'ad-thumbs\'>)(.)*(?=<div\sclass="product_tab\svisible">)/s', $result, $str);
echo $str;
переменную $result проверила до рег.выражения, тип - строка, выводит на экран с тегами код...
если исходить из того, что я чайник...
подскажите, пожалуйста, почему мне возвращается после обработки регулярного выражения результат, цитирую: "Array"
...
мне кажется.. регулярное выражение должно было сработать.. и результат должен быть оформлен кодом...
понимаю, что скорее всего вопрос глупый.. заранее извиняюсь.. но понять очень надо.. работает ли регулярка.. или я не правильно вывожу результат..

главное риторический вопрос.. почему выводит тип данных.. а не результат работы рег. выражения....
0
368 / 406 / 165
Регистрация: 29.05.2014
Сообщений: 1,494
03.07.2014, 14:04
Лучший ответ Сообщение было отмечено maia666 как решение

Решение

$str после preg_match_all() формируется как двумерный массив.
увидеть целиком его можно так
PHP
1
2
3
echo "<pre>";
print_r($str);
echo "</pre>";
В первом массиве($str[0]) результат вместе с регуляркой
Во втором массиве($str[1]) чистый результат

по отдельности выводится так:
PHP
1
2
3
4
echo $str[1][0];
echo $str[1][1];
//...... и так далее
echo $str[1][100500];
Или через цикл.
если массив пустой то регулярка не отработала
1
0 / 0 / 0
Регистрация: 28.06.2014
Сообщений: 48
03.07.2014, 16:00  [ТС]
огромное спасибо! все поняла))

Добавлено через 1 час 54 минуты
УРА!))

вот такой код:
PHP
1
2
3
4
5
6
7
$content = file('http://www.merlion.com/catalog/product/929443/'); //получаем стр
$content = implode("\n\r", $content);
$result = htmlspecialchars ($content);
$result = preg_match_all('/http:\/\/img.merlion.ru\/items(\/\d{6}_\w+\d*)_s.jpg/', $result, $str);
echo "<pre>";
print_r($str);
echo "</pre>";
возвращает
HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
Array
(
    [0] => Array
        (
            [0] => http://img.merlion.ru/items/929443_v01_s.jpg
        )
 
    [1] => Array
        (
            [0] => /929443_v01
        )
 
)
0
365 / 372 / 89
Регистрация: 01.12.2013
Сообщений: 1,629
03.07.2014, 16:06
Цитата Сообщение от maia666 Посмотреть сообщение
вы родились со знанием php? люди учатся, это нормально.
поржал. В вашем случае люди не учатся, а скандалят. Что мешает воспользоваться переводчиком?

expects parameter 2 to be string, array given
читать учимся
0
0 / 0 / 0
Регистрация: 28.06.2014
Сообщений: 48
03.07.2014, 16:15  [ТС]
Цитата Сообщение от ads Посмотреть сообщение
поржал. В вашем случае люди не учатся, а скандалят. Что мешает воспользоваться переводчиком?
а где вы скандал увидели? я констатировала факт о том, что люди со знанием php не рождаются, иначе форума тематического не было бы.. иначе зачем он?
дословный перевод этой ошибки будет таким: "ожидается параметр 2 в значении строки, массива данных" - а теперь скажите, где тут написано, что ему не нравится тип исходных данных, которые необходимо прогнать по регулярке?
ржите на другой ветке - php для профессионалов, например. Я не претендую на проф. знания, а учусь, поэтому и сижу в песочнице (ветке - php для новичков).
я прекрасно понимаю, что не все могут и хотят помочь в разборе ошибки - если вы не можете (или не хотите) помочь - так топайте на другую тему, зачем людям настроение портить ворчанием не по теме?
0
365 / 372 / 89
Регистрация: 01.12.2013
Сообщений: 1,629
03.07.2014, 16:22
умыли. не ржу. приношу извинения. стою на коленях
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
03.07.2014, 16:22
Помогаю со студенческими работами здесь

Ошибка: file_get_contents() expects parameter 1 to be string, array given
есть код $url = file_get_contents(&quot;moduls/sitemap/xxx.txt&quot;); preg_match_all(&quot;(http:\/\/++.html)&quot;, $url, $matches); $w = 0; ...

PHP Warning: trim() expects parameter 1 to be string, array given
Помогите пожалуйста! Не могу разобраться (( 1549: if (is_utf8($arr)) $arr = trim($arr);

Ошибка Warning: strpos() expects parameter 1 to be string, array given in
При работе с сайтом выдает такую ошибку. Warning: strpos() expects parameter 1 to be string, array given in...

Ошибка с substr(): "substr() expects parameter 1 to be string, array given"
Помогите, не могу понять что не так. Как сделать что-бы заработало? Вот часть кода: $rgrt_one = substr($flags, 0, floor($stringL)); ...

[Drupal 7] Предупржедение "addcslashes() expects parameter 1 to be string, array given"
Выдает ошибку что не так? Warning: addcslashes() expects parameter 1 to be string, array given в функции...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка. Рецензия / Мнение/ Перевод https:/ / **********/ gallery/ thinkpad-x220-tablet-porn-gzoEAjs . . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru