#php
#php
Вопрос:
Я пытаюсь заменить одну и ту же строку разными значениями для каждого случая, но у меня возникают большие проблемы, и я понятия не имею, как это исправить.
$order = "john, book, 1";
$order = explode(',', $order);
$url = "https://fakerestapi.azurewebsites.net/api/author/{}/data/{}/oc/v/{}/";
$repeat = substr_count($url, "{}");
for ($i=0; $i<=$repeat; $i ) {
$final .= str_replace('{}', $repeat[$i], $url);
}
echo $final;
Текущий вывод:
NOTICE Undefined variable: final on line number 10
https://fakerestapi.azurewebsites.net/api/author//data//oc/v/https://fakerestapi.azurewebsites.net/api/author//data//oc/v/https://fakerestapi.azurewebsites.net/api/author//data//oc/v/https://fakerestapi.azurewebsites.net/api/author//data//oc/v/
Мой ожидаемый результат должен быть примерно таким:
https://fakerestapi.azurewebsites.net/api/author/john/data/book/oc/v/1/
Вы можете мне помочь?
Спасибо
Комментарии:
1. Посмотрите
sprintf
.2. Сообщение об ошибке довольно четкое. Вы забыли объявить
$final
переменную?3.
substr_count()
возвращает целое число, а не массив
Ответ №1:
это будет работать
<?php
$order = "john, book, 1";
$order = explode(',', $order);
$url = "https://fakerestapi.azurewebsites.net/api/author/{}/data/{}/oc/v/{}/";
$repeat = substr_count($url, "{}");
$final = $url;
for ($i=0; $i < $repeat; $i ) {
$final = preg_replace('/{}/', $order[$i], $final, 1);
}
echo $final;
?>
Комментарии:
1. Это доставило
https://fakerestapi.azurewebsites.net/api/author/john/data/john/oc/v/john/
бы, верно? Потому что после первой итерации$final
больше не содержит{}
2. это обеспечит ожидаемый результат
3. Это забавно, потому что для меня это не так.
4. извините, моя ошибка —
$final = preg_replace('/{}/', $order[$i], $final, 1);
. я должен использоватьpreg_replace
вместоstr_replace
— см. Отредактированный ответ5. Не проблема. Может быть, используйте
trim()
, потому что теперь вы получитеhttps://fakerestapi.azurewebsites.net/api/author/john/data/ book/oc/v/ 1/
(включая пробелы)
Ответ №2:
Я предполагаю, что ваш $order
массив будет иметь только три значения,
$order = "john, book, 1";
$order = explode(',', $order);
$url = "https://fakerestapi.azurewebsites.net/api/author/%s/data/%s/oc/v/%s/";
echo sprintf($url, trim($order[0]), trim($order[1]), trim($order[2]));
ВЫВОД:
https://fakerestapi.azurewebsites.net/api/author/john/data/book/oc/v/1/
Ответ №3:
Сделайте URL-адрес массивом с помощью explode и соедините два массива в цикле.
$order = "john, book, 1";
$order = explode(', ', $order);
$url = "https://fakerestapi.azurewebsites.net/api/author/{}/data/{}/oc/v/{}/";
$url = explode("{}", $url);
$final ="";
foreach($url as $key => $u){
$final .= $u;
if(isset($order[$key])) $final .= $order[$key];
}
echo $final;
//https://fakerestapi.azurewebsites.net/api/author/john/data/book/oc/v/1/