У мене є кілька ключів масиву php, які заповнені великою кількістю дивних символів.
Це дозволено? Чи є обмеження щодо того, що я не можу використовувати?
У мене є кілька ключів масиву php, які заповнені великою кількістю дивних символів.
Це дозволено? Чи є обмеження щодо того, що я не можу використовувати?
Відповіді:
Відповідно до посібника :
Ключем може бути ціле число або рядок. Значення може бути будь-якого типу.
Крім того, відбудуться наступні ключі:
- Рядки, що містять допустимі цілі числа, будуть передані цілочисельному типу. Наприклад, ключ "8" насправді зберігатиметься під номером 8. З іншого боку, "08" не буде передаватися, оскільки це не є дійсним цілим десятковим числом.
- Плаваючі числа також приводяться до цілих чисел, що означає, що дробова частина буде усічена. Наприклад, ключ 8.7 фактично зберігатиметься під 8.
- Були також приводяться до цілих чисел, тобто ключ true насправді зберігатиметься під 1, а ключ false - під 0.
- Null буде передано до порожнього рядка, тобто ключ null фактично зберігатиметься в "".
- Масиви та об'єкти не можуть використовуватися як ключі. Це призведе до попередження: Незаконне зміщення.
Посібник ще раз :
Рядок - це ряд символів, де символ є таким самим, як байт. Це означає, що PHP підтримує лише 256-символьний набір і, отже, не пропонує вбудовану підтримку Unicode. Перегляньте детальну інформацію про тип рядка.
Отже, коротко, будь-який рядок може бути ключем. І рядок може містити будь-які двійкові дані (до 2 Гб). Отже, ключем можуть бути будь-які двійкові дані (оскільки рядок може бути будь-якими двійковими даними).
Деякі випадкові (допустимі) зловживання ключами масиву:
$w = array(chr(0) => 'null byte?', chr(rand(0, 255)) => 'random byte?');
var_dump($w);
Ключем повинен бути рядок або ціле число. Існують деякі касти, але я думаю, що в посібнику добре пояснено:
Ключем може бути ціле число або рядок. Значення може бути будь-якого типу.
Крім того, відбудуться наступні ключі:
- Рядки, що містять допустимі цілі числа, будуть передані цілочисельному типу. Наприклад, ключ "8" насправді зберігатиметься під 8. З іншого боку, "08" не буде передаватися, оскільки це не є дійсним цілим десятковим числом.
- Плаваючі числа також призначаються до цілих чисел, що означає, що дробова частина буде усічена. Наприклад, ключ 8.7 фактично зберігатиметься під 8.
- Були також приводяться до цілих чисел, тобто ключ true насправді зберігатиметься під 1, а ключ false - під 0.
- Null буде передано до порожнього рядка, тобто ключ null фактично зберігатиметься в "".
- Масиви та об'єкти не можуть використовуватися як ключі. Це призведе до попередження: Незаконне зміщення.
Я знайшов цю відповідь, шукаючи додаткову інформацію про свою проблему. Я використовував рядки з символами UTF-8, які не працювали як ключі до масиву, який я мав.
Щось на зразок
$str = "R&D - Solution";
$arr = array( "R&D - Solution" => "Research" );
echo $arr[$str]; // did not work
Для мене (не великим чи розумним) рішенням було зробити це ..
$str = md5("R&D - Solution");
$arr = array( md5("R&D - Solution") => "Research" );
echo $arr[$str]; // works!
Ключі масиву PHP можуть бути цілими чи рядками. Рядки PHP - це байтові масиви, що означає послідовності байтів. Інших типів рядків не існує, і PHP інакше не встановлює жодних спеціальних обмежень для рядків ключів масиву. Іншими словами: поки це рядок, все йде.
Якщо складні ключі викликають помилку "невизначений індекс", можливо, у вас просто є проблема "обрізки".
Я збожеволів, бо складний ключ виплюнув помилку "невизначений індекс", і я подумав, що це, можливо, було порушення синтаксису. Ключ масиву, що спричиняє помилку, був побудований із поля із запиту бази даних MySQL, яке я перетворював у ключ і використовував у новому масиві. Ключ виглядав так: pl_1DNKoiJKwotCqAycickBVhTy
і ось як був побудований код.
//new array created from database query
$new_array[$dbquery['fieldname']] = {some value};
//key value found in field of second array
$keyval = $array_two['fieldname'];
//this produced the "undefined index" error
echo $new_array[$keyval];
коли, насправді, $keyval
і $dbquery['fieldname']
виявилося ідеальним збігом (візуально перевірено шляхом відлуння обох переглядачів). Таємницю розв’язали простим використанням trim
у другому твердженні так: $keyval = trim($array_two['fieldname']);
Одного разу «обрізавшись», php більше не скаржився.
Сподіваючись, це позбавить деяких інших від деяких неприємних моментів ...
Я особисто не мав жодних проблем із незвичними символами в клавішах масиву. Те, що є і що не є законним, недостатньо добре задокументовано, окрім як сказати, що ключовим фактором повинен бути скаляр. Найкраще - просто спробувати і побачити.
У масиві php ви не можете використовувати ключ: 2.3 або десяткові числа
Кодуйте php-сторінку в ANSI "é" зможе використовувати (Cinéma не відображатиметься як Cinéma). У Notepad ++ просто скористайтеся меню Encode => Convert ANSI і збережіть
é
його немає, що робити, якщо OP все-таки не використовує Notepad ++?
$a = (object) ['@km³' => 123]; error_log($a->@km³);