powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / [PHP] Как преобразовать string в array?
14 сообщений из 39, страница 2 из 2
[PHP] Как преобразовать string в array?
    #38704088
alex564657498765453
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1106675&msg=16343177][PHP] Как преобразовать string в array?

так долго обсуждали, а решение в самом верху :)

только проверка там лишняя на существование ключа...это артифакт, я сначала код по другому сделал, потом упростил и не всё выкинул тестовое.

там достаточно $link = &$link[$index];

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

и нащёт фразы ScerFlow - что нельзя добавлять ключи без значений..

ну вот собственно пример когда можно

ЗЫ
хитрость, что при обьявлении ссылки на переменую, которой нету, она создаёться автоматически.
...
Рейтинг: 0 / 0
[PHP] Как преобразовать string в array?
    #38704109
Фотография ScareCrow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторона создаёться автоматически.
и инициализируется чем?
...
Рейтинг: 0 / 0
[PHP] Как преобразовать string в array?
    #38704153
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ScareCrowавторона создаёться автоматически.
и инициализируется чем?

Прикольно... я не знал о таком поведении.
Реально, при обращении к несуществующему ключу массива, на который была сделана ссылка, ошибка не выскакивает, а всё как надо отрабатывает. То есть php считает такую переменную уже объявленной... Инициализирует он её разумеется значением NULL.

то есть:
Код: php
1.
2.
3.
$link = &$a["hello"];
var_dump($a["hello"]); // ошибки нету
var_dump($b["hello"]); // ошибка выскакивает (error или warning в зависимости от настроек)
...
Рейтинг: 0 / 0
[PHP] Как преобразовать string в array?
    #38704171
Фотография ScareCrow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторТо есть php считает такую переменную уже объявленной

http://nikic.github.io/2014/01/10/The-case-against-the-ifsetor-function.html
...
Рейтинг: 0 / 0
[PHP] Как преобразовать string в array?
    #38704275
alex564657498765453
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ПрограмёрScareCrowпропущено...

и инициализируется чем?

Прикольно... я не знал о таком поведении.
Реально, при обращении к несуществующему ключу массива, на который была сделана ссылка, ошибка не выскакивает, а всё как надо отрабатывает. То есть php считает такую переменную уже объявленной... Инициализирует он её разумеется значением NULL.

то есть:
Код: php
1.
2.
3.
$link = &$a["hello"];
var_dump($a["hello"]); // ошибки нету
var_dump($b["hello"]); // ошибка выскакивает (error или warning в зависимости от настроек)



я больше скажу... вчера случайно набрёл, и потом убедился...
аля шаблон Масив-Одиночка.
$a[0]=10;

//$link = &$a[0];

$b=$a;
$b[0]++;

//$link = &$value;

$c=$b;
$c[0]++;


и мы понимаем что в масивах должны быть числа 10 11 12 ибо это три разных масива.

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

и даже если разкоментировать вторую строку - уничтожить ссылку на елемент масива,
всёравно скопировать масив не удасться...он будет по ссылке присваиваться.
...
Рейтинг: 0 / 0
[PHP] Как преобразовать string в array?
    #38704361
Фотография ScareCrow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
там еще веселее.

угадай ответ.
Код: php
1.
2.
3.
4.
5.
<?php
$a = 1;
$b = array(2, 3);
$arr = array(&$a, &$b[0], &$b[1]);
$arr[0]++; $arr[1]++; $arr[2]++;
...
Рейтинг: 0 / 0
[PHP] Как преобразовать string в array?
    #38705189
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ScareCrowтам еще веселее.

угадай ответ.
Код: php
1.
2.
3.
4.
5.
<?php
$a = 1;
$b = array(2, 3);
$arr = array(&$a, &$b[0], &$b[1]);
$arr[0]++; $arr[1]++; $arr[2]++;



угадал :)
$arr = array(2,3,4) - проверено

или имелось ввиду что-то другое?
...
Рейтинг: 0 / 0
[PHP] Как преобразовать string в array?
    #38705263
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alex564657498765453Програмёрпропущено...


Прикольно... я не знал о таком поведении.
Реально, при обращении к несуществующему ключу массива, на который была сделана ссылка, ошибка не выскакивает, а всё как надо отрабатывает. То есть php считает такую переменную уже объявленной... Инициализирует он её разумеется значением NULL.

то есть:
Код: php
1.
2.
3.
$link = &$a["hello"];
var_dump($a["hello"]); // ошибки нету
var_dump($b["hello"]); // ошибка выскакивает (error или warning в зависимости от настроек)



я больше скажу... вчера случайно набрёл, и потом убедился...
аля шаблон Масив-Одиночка.
$a[0]=10;

//$link = &$a[0];

$b=$a;
$b[0]++;

//$link = &$value;

$c=$b;
$c[0]++;


и мы понимаем что в масивах должны быть числа 10 11 12 ибо это три разных масива.

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

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

Скажу больше )) Похоже это косяк разрабов (не знаю как и почему так вышло, но так работать не должно... при создании ссылки на переменную мы не должны затрагивать саму переменную). И сам массив передаётся по значению (копируется), а просто элемент массива почему становится не значением, а ссылкой на значение, от чего наблюдается описанный выше эффект (то есть если теперь присвоить $c[1], то $a[1] не появится).

Очень интересно послушать, знает ли кто в чём природа этого косяка? Может быть есть ещё что-то с этим связанное, чего стоит опасаться? :)
...
Рейтинг: 0 / 0
[PHP] Как преобразовать string в array?
    #38705280
Фотография ScareCrow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторОчень интересно послушать, знает ли кто в чём природа этого косяка? Может быть есть ещё что-то с этим связанное, чего стоит опасаться? :)


http://nikic.github.io/2014/01/10/The-case-against-the-ifsetor-function.html This seems to come as a surprise to most people, because the code definitely looks like it accesses an undefined index and ought to throw a notice. Here the magic of references comes in: If you perform a by-reference argument pass (or assign) PHP will be using a different fetch type for retrieving the array offsets. In this particular case it would issue a number of “dim w” (dimension write) fetches.
...
Рейтинг: 0 / 0
[PHP] Как преобразовать string в array?
    #38705287
Фотография ScareCrow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторили имелось ввиду что-то другое?

Код: php
1.
/* $a == 2, $b == array(3, 4); */
...
Рейтинг: 0 / 0
[PHP] Как преобразовать string в array?
    #38705324
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ScareCrowавторОчень интересно послушать, знает ли кто в чём природа этого косяка? Может быть есть ещё что-то с этим связанное, чего стоит опасаться? :)


http://nikic.github.io/2014/01/10/The-case-against-the-ifsetor-function.html This seems to come as a surprise to most people, because the code definitely looks like it accesses an undefined index and ought to throw a notice. Here the magic of references comes in: If you perform a by-reference argument pass (or assign) PHP will be using a different fetch type for retrieving the array offsets. In this particular case it would issue a number of “dim w” (dimension write) fetches.

Сложности с переводом :) Что там написано то? "Если вы выполняете установку (назначение) аргумента по ссылке, PHP будет использовать другой тип выборки при получении смещений массива. В данном случае это будет запрос номера 'dim w' (размерность записи) выборки"

Последнее предложение остаётся для меня загадкой (возможно что не так перевёл). Первое - не касающиеся темы (так как запись по ссылке мы не производим).

Вопрос пока остаётся для меня непонятным. :)
...
Рейтинг: 0 / 0
[PHP] Как преобразовать string в array?
    #38705328
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ScareCrowавторили имелось ввиду что-то другое?

Код: php
1.
/* $a == 2, $b == array(3, 4); */



Именно это и ожидалось. :) в чём тут хитрость?

P.S. Возможно ты неверно понял то, о чём писал alex564657498765453. Там фишка в том, что мы просто создаём ссылку на элемент массива и он сам почему-то становится ссылкой (то есть не явно преобразовывается в ссылку).
...
Рейтинг: 0 / 0
[PHP] Как преобразовать string в array?
    #38705334
Фотография ScareCrow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторСложности с переводом :) Что там написано то?
ну почитай дальше по ссылке.

авторA write-fetch obviously doesn’t throw a notice if the assigned index doesn’t exist yet (otherwise you wouldn’t be able to create indexes without throwing notices). What’s interesting is that the whole thing also work recursively, so none of the indices in the chain have to exist:

$array[0][1][2] = 'foobar';

The above example will not throw a notice if $array[0][1] doesn’t exist, it won’t throw a notice if $array[0] doesn’t exist and it even won’t throw a notice if the $array variable itself doesn’t exist.

PHP implements write-fetches by creating the respective offset and initializing it to null (if it doesn’t yet exist). This is compatible with nested index assigns because PHP allows silent casts from null (and other falsy values) to arrays.
...
Рейтинг: 0 / 0
[PHP] Как преобразовать string в array?
    #38705475
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ScareCrowавторСложности с переводом :) Что там написано то?
ну почитай дальше по ссылке.

авторA write-fetch obviously doesn’t throw a notice if the assigned index doesn’t exist yet (otherwise you wouldn’t be able to create indexes without throwing notices). What’s interesting is that the whole thing also work recursively, so none of the indices in the chain have to exist:

$array[0][1][2] = 'foobar';

The above example will not throw a notice if $array[0][1] doesn’t exist, it won’t throw a notice if $array[0] doesn’t exist and it even won’t throw a notice if the $array variable itself doesn’t exist.

PHP implements write-fetches by creating the respective offset and initializing it to null (if it doesn’t yet exist). This is compatible with nested index assigns because PHP allows silent casts from null (and other falsy values) to arrays.

Пока всёровно не понимаю отношения этого к описанному косяку (разве только ты это к чему то другому пишешь)...

Ну инициализирует пхп несуществующие элементы массива как null для последующего type-cast'а в массив и продолжения записи цепочки. Как это влияет на то, что при создании ссылки на элемент массива он сам становится ссылкой?
...
Рейтинг: 0 / 0
14 сообщений из 39, страница 2 из 2
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / [PHP] Как преобразовать string в array?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]