Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Максимальная длина ключа ассоциативного массива

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
armancho7777777 Супермодератор
Отправлено: 02 Апреля, 2012 - 03:00:03
Post Id



Активный участник


Покинул форум
Сообщений всего: 4526
Дата рег-ции: Февр. 2011  
Откуда: Москва


Помог: 221 раз(а)




Всем привет!
Какая допускается максимальная длина ключа ассоциативного массива,
и допускаются ли ключи вида ниже ?
PHP:
скопировать код в буфер обмена
  1. '/раздел_1/раздел_1.2/раздел_1.2.3/раздел_1.2.3.4/раздел_1.2.3.4.5/раздел_1.2.3.4.5.6/' => 'Раздел 1.2.3.4.5.6'
  2. );

(Отредактировано автором: 02 Апреля, 2012 - 05:48:33)

 
 Top
DeepVarvar Супермодератор
Отправлено: 02 Апреля, 2012 - 04:46:15
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




Да, допускается. Ассоциативный ключ, это в любом случае строка.
Так же допустимы экранирование, конкатенация и пр. действия со строками.

Кроме того, любой ключ, даже числовой, интерпретатор php рассматривает как строку.
Т.е.:
PHP:
скопировать код в буфер обмена
  1. $arr = array();
  2.  
  3. $arr[0] = "aaa";
  4. $arr['0'] = "bbb";
  5.  
  6. var_dump($arr);


Что же касается ограничения длины я не знаю,
но у меня влезали строки до 1000 символов.
 
 Top
armancho7777777 Супермодератор
Отправлено: 02 Апреля, 2012 - 05:45:49
Post Id



Активный участник


Покинул форум
Сообщений всего: 4526
Дата рег-ции: Февр. 2011  
Откуда: Москва


Помог: 221 раз(а)




DeepVarvar пишет:
у меня влезали строки до 1000 символов.

Ооо, мне за глаза хватит))
Спасибо DeepVarvar!)

(Отредактировано автором: 02 Апреля, 2012 - 05:50:08)

 
 Top
Гость
Отправлено: 30 Мая, 2012 - 14:55:47
Post Id


УДАЛЁН










В PHP индексом массива может быть не только число, но и строка. Причем на такую строку не накладываются никакие ограничения: она может содержать пробелы, длина такой строки может быть любой.
Источник: http://php.su/learnphp/datatypes/?array
 
 Top
EuGen Администратор
Отправлено: 30 Мая, 2012 - 14:56:35
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




armancho7777777
Максимальная длина - ограничение по памяти, выделенное скрипту.


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
caballero
Отправлено: 30 Мая, 2012 - 15:06:30
Post Id


Активный участник


Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011  
Откуда: Харьков


Помог: 126 раз(а)




Лично я в подобных случаях использовал бы хеширование строки.


-----
Бесплатная система складского учета с открытым кодом https://zippy[dot]com[dot]ua/zstore
 
 Top
Bio man
Отправлено: 30 Мая, 2012 - 15:12:42
Post Id


Постоянный участник


Покинул форум
Сообщений всего: 2751
Дата рег-ции: Июль 2010  
Откуда: Даугавпилс, Латвия


Помог: 52 раз(а)




caballero
а если нужно работать с ключами и их смыслом? Тоже хэширование? Или шифрование?
 
 Top
EuGen Администратор
Отправлено: 30 Мая, 2012 - 15:19:00
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




Bio man
Выше верную идею предлагают. Если нужен поиск по некотой строке, которая представляет собой несколько мегабайт данных, то гораздо разумнее хранить, например, её md5-хеш в качестве ключа. Хотя в целом мне сложно представить ситуацию, когда потребуются такие "ключи".


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
Bio man
Отправлено: 30 Мая, 2012 - 15:30:09
Post Id


Постоянный участник


Покинул форум
Сообщений всего: 2751
Дата рег-ции: Июль 2010  
Откуда: Даугавпилс, Латвия


Помог: 52 раз(а)




EuGen
В таком случае да. Но если ключ это оочень длинная строка ~1000 символов, и нужно извлечь ее и с ней работать то не о каком хешировании не может быть речи.
Но представить ситуацию, когда это надо не могу.
 
 Top
tuareg
Отправлено: 30 Мая, 2012 - 16:28:34
Post Id


Участник


Покинул форум
Сообщений всего: 1234
Дата рег-ции: Июнь 2010  


Помог: 69 раз(а)




Bio man пишет:
EuGen
В таком случае да. Но если ключ это оочень длинная строка ~1000 символов, и нужно извлечь ее и с ней работать то не о каком хешировании не может быть речи.
Но представить ситуацию, когда это надо не могу.

Bio man Зачем вот смотри. Есть "предполагаемый" массив
PHP:
скопировать код в буфер обмена
  1.  
  2. $array=array();
  3. $array['тут длинный ключ']='какое-то значение';
  4. /*count($array)=10000*/
  5.  

Как хранятся массивы( ключи) можно прочитать на хабре коротко $array['key']-->hash таблица
Идем дальше. Улыбка
Зачем нам это?
Можно сделать проще:
Ключом сделать hash
А первым элементом истинное значение, тогда получится следующее
PHP:
скопировать код в буфер обмена
  1.  
  2. $text='длинная строка'
  3. $key=md5($text);
  4. $array=array();
  5. $array[$key]=array(
  6.  'original':$text // мало ли коллизия и т.д
  7. )
  8.  

Найти данный элемент будет очень просто и быстро

(Отредактировано автором: 30 Мая, 2012 - 16:35:49)

 
 Top
DeepVarvar Супермодератор
Отправлено: 30 Мая, 2012 - 16:46:23
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




Я пилил себе кеш запросов в БД от кривых рук (и своих тоже Радость ).
Суть в том что готовый отэкранированый запрос это ключ в массиве запросов,
а его значение это результат запроса.
Кешируется только на момент выполнения, никуда не сбрасывается.
Кроме того есть отдельные методы вида: queryWithCache и queryWithOutCache.
Соответственно если дергается кешируемый запрос, он сперва ищется в кеше,
если его там нет, делается запрос и его результат помещается в кеш.
Хеш я не делал, не особо длинная строка. Хотя можно будет и добавить.

Такие вещи нужны не часто, но бывает что требуется. Во всяком случае мне так удобно.
 
 Top
armancho7777777 Супермодератор
Отправлено: 30 Мая, 2012 - 17:16:50
Post Id



Активный участник


Покинул форум
Сообщений всего: 4526
Дата рег-ции: Февр. 2011  
Откуда: Москва


Помог: 221 раз(а)




EuGen пишет:
armancho7777777
Максимальная длина - ограничение по памяти, выделенное скрипту.

Спасибо EuGen!)
 
 Top
caballero
Отправлено: 30 Мая, 2012 - 17:27:22
Post Id


Активный участник


Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011  
Откуда: Харьков


Помог: 126 раз(а)




Bio man пишет:
а если нужно работать с ключами и их смыслом? Тоже хэширование? Или шифрование?

не нужно будет если не говнокодить.
у ключей обычно не бывает смысла.

(Отредактировано автором: 30 Мая, 2012 - 17:29:42)



-----
Бесплатная система складского учета с открытым кодом https://zippy[dot]com[dot]ua/zstore
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Хранение данных, их вывод и обработка »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB