Использование пустой строки в качестве ключа в ассоциативном массиве

Мне нужно выбрать и сгруппировать некоторые элементы в соответствии с некоторыми значениями, и это легко сделать с помощью ассоциативного многомерного массива:

$Groups = array(
    "Value1" = array("Item1", "Item3"),
    "Value2" = array("Item2", "Item4")
    );

Но некоторые элементы не имеют значения, поэтому мой массив будет выглядеть примерно так:

$Groups = array(
    "Value1" = array("Item1", "Item3"),
    "Value2" = array("Item2", "Item4")
    "" = array("Item5", "Item6")
    );

Я протестировал его (также в цикле foreach), и все работает нормально, но я новичок в php и беспокоюсь, что использование пустого ключа может привести к неожиданным проблемам.

Есть ли проблемы с использованием ассоциативного массива с пустым ключом?
Является ли это плохой практикой?
Если да, то как я могу достичь своей цели?


person genespos    schedule 01.03.2018    source источник
comment
Откуда вы берете массив? Для чего вы его используете? Хорошо это или плохо, зависит от варианта использования.   -  person Magnus Eriksson    schedule 02.03.2018
comment
how could I reach my goal? Какова ваша цель? :)   -  person Litty    schedule 02.03.2018
comment
@Litty Я имею в виду эквивалент второго массива. Во всяком случае, у меня есть ответы   -  person genespos    schedule 02.03.2018
comment
«Некоторые элементы» подразумевает, что у вас может быть более одной пустой строки в качестве ключа, что, конечно, приведет к затиранию. Возможно, вам следует создать для них уникальные идентификаторы.   -  person Progrock    schedule 02.03.2018
comment
Вы также должны использовать оператор двойной стрелки => для пар ключ-значение при определении массивов.   -  person Progrock    schedule 02.03.2018
comment
См. дополнительную информацию о ключах массива: stackoverflow.com/q/10696067/3392762   -  person Progrock    schedule 02.03.2018
comment
@genespos, если вы найдете ответы полезными, пожалуйста, примите один из них.   -  person Ivan Kalita    schedule 02.03.2018


Ответы (2)


Вы можете использовать пустую строку в качестве ключа, но будьте осторожны, потому что значение null будет преобразовано в пустую строку:

<?php

$a = ['' => 1];

echo $a[''];
// prints 1

echo $a[null];
// also prints 1

Я думаю, что лучше объявить некоторую константу «без значения» (которая на самом деле имеет значение) и использовать ее как ключ массива:

<?php

define('NO_VALUE_KEY', 'the_key_without_value');

$a = [NO_VALUE_KEY => 1];
person Ivan Kalita    schedule 01.03.2018

Пустого ключа не бывает. Ключ может быть пустой строкой, но вы всегда можете получить к нему доступ по адресу $groups[""].

Полезной вещью ассоциативных массивов является ассоциация, поэтому имеет ли смысл иметь пустую строку в качестве ключа массива, зависит от того, как вы связываете этот ключ со значением.

person Devon    schedule 01.03.2018
comment
Да это не пустая а пустая строка! Я обновлю заголовок вопроса - person genespos; 02.03.2018
comment
@LightnessRacesinOrbit На пустую строку по-прежнему можно сослаться. Вы не можете сделать $array = [ => "value" ], но $array = [ "" => "value"] можно. - person Devon; 02.03.2018
comment
@Devon: Да, я неправильно прочитал комментарий Genespos (в основном потому, что предыдущий пример имеет так мало смысла, что даже не пришел мне в голову!) - person Lightness Races in Orbit; 02.03.2018