Оператор ==
проверяет, указывают ли две ссылки на один и тот же объект или нет. .equals()
проверьте фактическое содержимое строки (значение).
Обратите внимание, что метод .equals()
принадлежит классу Object
(суперкласс всех классов). Вам необходимо переопределить его в соответствии с вашим требованием к классу, но для String оно уже реализовано и проверяет, имеет ли две строки одно и то же значение.
String s1 = "Stack Overflow";
String s2 = "Stack Overflow";
s1 == s2; //true
s1.equals(s2); //true
Причина: строка литералы, созданные без нуля, хранятся в пуле строк в области перментонов кучи. Таким образом, оба s1 и s2 указывают на один и тот же объект в пуле. String s1 = new String("Stack Overflow");
String s2 = new String("Stack Overflow");
s1 == s2; //false
s1.equals(s2); //true
Причина. Если вы создаете объект String с использованием ключевого слова new
, ему выделяется отдельное пространство в куче. Если у вас возникла проблема с преобразованием строки запроса в массив из-за кодированных амперсандов
&
, то обязательно используйте html_entity_decode
Пример:
// Input string //
$input = 'pg_id=2&parent_id=2&document&video';
// Parse //
parse_str(html_entity_decode($input), $out);
// Output of $out //
array(
'pg_id' => 2,
'parent_id' => 2,
'document' => ,
'video' =>
)
Это однострочный синтаксический анализатор для анализа запроса из текущего URL-адреса в массив:
parse_str($_SERVER['QUERY_STRING'], $query);
Иногда только parse_str()
отмечает точную, он может отображаться, например:
$url = "somepage?id=123&lang=gr&size=300";
parse_str () вернет:
Array (
[somepage?id] => 123
[lang] => gr
[size] => 300
)
Лучше было бы объединить parse_str()
с parse_url()
следующим образом:
$url = "somepage?id=123&lang=gr&size=300";
parse_str( parse_url( $url, PHP_URL_QUERY), $array );
print_r( $array );
?key=lorem&key=ipsum
приведет к array(["key"]=>"ipsum")
. Вопрос в том, есть ли функция для получения s.th. как array(["key"]=>array("lorem", "ipsum"))
или мне нужно создать эту функцию самостоятельно?
– MaBi
1 March 2015 в 19:54
?key=lorem&key=ipsum
, как если бы вы предоставили key=ipsum
, если это была строка запроса в URL-адресе. И я считаю, что считается недействительным, чтобы повторно использовать ключ и ожидать согласованных результатов или что все экземпляры ключа сохраняются. Допустимый подход, по крайней мере для строки запроса, отправленной на PHP, будет ?key[]=lorem&key[]=ipsum
, поэтому ваш доморощенный подход может искать любые вхождения &{x}=
, где x происходит более одного раза, и заменять на x[]
(и обрабатывать? As такой же, как & amp;)
– Anthony
11 June 2015 в 07:23
?key[]=lorem&key[]=ipsum
несколько недель назад. Но спасибо за обмен ссылками!
– MaBi
12 June 2015 в 04:58
parse_str($str,&$arr);
страшная ошибка
– user
5 July 2017 в 00:12
Использование parse_str()
.
$str = 'pg_id=2&parent_id=2&document&video';
parse_str($str, $arr);
print_r($arr);