2015-04-01 2 views
1

Я использую функцию str_replace(), чтобы заменить некоторые значения в массиве и использовать новое значение позже в запросе mysql. Однако я нашел странную ситуацию, которую я не могу понять. Почему эти запросы не возвращают один и тот же результат?PHP str_replace: порядок элементов в массивах и результат вывода

Первая версия кода возвращает: 214847

<php? $idPage=array(18,21,22); 
$idCompetition=array(2147,2148,2149); 

$idT=str_replace($idPage,$idCompetition,18); 

echo $idT; ?> 

И если изменить порядок в массивах, результат: 2147

<php? $idPage=array(21,22,18); 
$idCompetition=array(2148,2149,2147); 


$idT=str_replace($idPage,$idCompetition,18); 

echo $idT; ?> 

2-й запрос возвращает нужный результат, и я использовал его в моем коде, но мне непонятно, почему первый запрос работает некорректно.

В реальном коде я обеспечиваю предмет замены (например, 18) путем считывания глобальной переменной страницы:

global $objPage;  
$idT=str_replace($idPage,$idCompetition,$objPage->id); 

Спасибо.

+0
+0

В первой программе запросов: 1. найти 18 в строке 18 2. изменить с 18 по 2147. 3 после этого найти в нашей строке (2147), 21 найдено и обмениваться на 2148, Наша строка 214847 –

+0

@ Rizier123, lol ... это не так, как я знаю ... Я ошибся, а потом скопировал его ... :) – darkoKc

ответ

0

В первом коде: str_replace находит первый элемент $ idPage (== '18') в строке поиска (== '18') и заменяет его на '2147', а затем повторяет второе значение $ idPage (== '21'), находит его в строке поиска (== ' 47' atm) и заменяет его на '2148', а затем выполняет итерацию до третьего значения $ idPage (== '22') и не может найти его в строке поиска (== '214847' atm).

+0

Спасибо. Ваш ответ объяснил, что произошло шаг за шагом. Технически мой вопрос спросил: «Почему я получил 214847», и на это был дан ответ. Кроме того, я хочу упомянуть, что @ Rizier123 связал мой вопрос с другим, где он объяснил, как эту проблему можно избежать. – darkoKc

Смежные вопросы