Обычно выглядит так: — А ну-ка, сделай мне фичу ХХХ!
— Ок, сделаю, но потом не удастся нормально реализовать УУУ
— А, пофиг, придумаем че-нить!
…
— КАКОГО #%$$%^ НЕ РАБОТАЕТ УУУ????777?777
Но ведь это принципиально разные массивы.
В классическом массиве доступ к произвольному элементу состоит из двух шагов:
1) прибавить к адресу начала масссива индекс * размер элемента(фиксированный)
2) считать данные из этого адреса в памяти
А в ссылочном:
1) прибавить к адресу начала массива адресов элементов индекс * размер ссылки на элемент(фиксированный)
2) считать по этому адресу адрес реального расположения данных
3) считать данные из их реального адреса.
нет, речь о том, что в классическом массиве невозможно хранить пременные переменной длины(проивольные строки хранить вообще никак). Только одинаковые блоки ) А в SplArray конвертируется любой php массив, так что это массив ссылок, но не значений.
Может возникнуть вопрос:
«А нафига?»
Так вот ответ, имхо, таков:
«Т.к. PHP язык для фронта, Ему зачастую приходится работать с данными со сложной ветвистой изменчивой структурой данных, что довольно удобно делать применяя встроенные функции и встроенный же функционал массивов, которые не совсем массивы.
А вот обработка большущих массивов однотипных данных в вашей страничке из фронта явно говорит о том, что вы что-то делаете не так, поэтому эффективностью такого варианта можно пожертвовать.»
На самом деле массив в PHP — это упорядоченное отображение, которое устанавливает соответствие между значением и ключом. Этот тип оптимизирован в нескольких направлениях, поэтому вы можете использовать его как собственно массив, список (вектор), хэш-таблицу (являющуюся реализацией карты), словарь, коллекцию, стэк, очередь и, возможно, что-то еще. Так как значением массива может быть другой массив PHP, можно также создавать деревья и многомерные массивы.
Проблема здесь в том, что обыкновенных массивов в PHP нет как понятия.
То, что вы там видите как нумерованный массив — на самом деле хранится в памяти в виде
[0=>'z_val',1=>'f_val',2=>'s_val']
, а не
['z_val','f_val','s_val']
Поэтому любое обращение «по индексу» в общем случае будет обращением по ключу и требует поиска пары ключ-значение в списке.
Насколько я понимаю их текущую реализацию, только при переходе от предыдущего элемента списка к следующему не надо ничего искать(вспоминаем списки из С).
Отсюда почти все «загадочности» с работой массивов в PHP.
В виде собранной статьи не нашел, собирал по крупицам. Может где-то и есть все это сразу и в наглядном виде, но найти не удалось.
Могу это на английский перевести, если надо =)
Это скорее проблема плохого комментирования видео, поправлю.
Ну и для UI сугубо на мой взгляд даже коротенькое видео иногда намного нагляднее серии скриншотов и словесных описаний.
— А ну-ка, сделай мне фичу ХХХ!
— Ок, сделаю, но потом не удастся нормально реализовать УУУ
— А, пофиг, придумаем че-нить!
…
— КАКОГО #%$$%^ НЕ РАБОТАЕТ УУУ????777?777
И хранится нечто вроде будет, если совсем упростить, в виде:
Поэтому даже если вы объявите массив как набор однотипных значений, цифровой индекс каждого элемента будет храниться в качестве ключа.
Вы смешиваете в одно список и хеш.
Как и разработчики PHP, которых я, кстати, процитировал :)
ps минуснул не я
В классическом массиве доступ к произвольному элементу состоит из двух шагов:
1) прибавить к адресу начала масссива индекс * размер элемента(фиксированный)
2) считать данные из этого адреса в памяти
А в ссылочном:
1) прибавить к адресу начала массива адресов элементов индекс * размер ссылки на элемент(фиксированный)
2) считать по этому адресу адрес реального расположения данных
3) считать данные из их реального адреса.
В итоге — в полтора раза больше действий
см. мои предыдущие комментарии
поменять на
и удивиться еще раз =)
«А нафига?»
Так вот ответ, имхо, таков:
«Т.к. PHP язык для фронта, Ему зачастую приходится работать с данными со сложной ветвистой изменчивой структурой данных, что довольно удобно делать применяя встроенные функции и встроенный же функционал массивов, которые не совсем массивы.
А вот обработка большущих массивов однотипных данных в вашей страничке из фронта явно говорит о том, что вы что-то делаете не так, поэтому эффективностью такого варианта можно пожертвовать.»
Из их документации
То, что вы там видите как нумерованный массив — на самом деле хранится в памяти в виде , а не
Поэтому любое обращение «по индексу» в общем случае будет обращением по ключу и требует поиска пары ключ-значение в списке.
Насколько я понимаю их текущую реализацию, только при переходе от предыдущего элемента списка к следующему не надо ничего искать(вспоминаем списки из С).
Отсюда почти все «загадочности» с работой массивов в PHP.
И да, PHP — не для обработки больших данных :)
В виде собранной статьи не нашел, собирал по крупицам. Может где-то и есть все это сразу и в наглядном виде, но найти не удалось.
Могу это на английский перевести, если надо =)
Ну и для UI сугубо на мой взгляд даже коротенькое видео иногда намного нагляднее серии скриншотов и словесных описаний.
Один вопрос, почему у вас на ваш же сервер ругается? :)