У меня есть массивный массив со следующими элементами:
array(
array('url' => 'http://someurl.com', 'param' => array(false,true,true,true)),
array(...),
array(...),
...
)
«логические» значения означают некоторые параметры (noindex, header, footer, sidebar).
Мне нужно изменить этот массив для лучшего понимания (некоторые пользователи не могут понять, что означает «логические» значения).
Я могу добавить имена параметров следующим образом:
array(
array(
'url' => 'http://someurl.com',
'param' => array(
'noindex' => false,
'header' => true,
'footer' => true,
'sidebar' => true
)
),
array(...),
array(...),
...
)
но этот метод слишком сильно увеличивает размер массива.
Как я могу упростить массив?
Спасибо!
Нет способа изменить понимание, не заплатив за это цену.
Единственный способ — добавить комментарий к массиву.
array(
array(
'url' => 'http://someurl.com',
'param' => array(
false, //noindex
true,//header
)
),
array(...),
array(...),
...
)
Но если все элементы массива одинаковы, вы можете сделать это.
array(
'url' => array('url1','url2',...),
'param'=>array(
'noindex'=>array(true,false,...),
'header'=>array(true,false,...)
));
Я думаю, что не слишком важно уменьшить использование памяти. потому что если вы не назначаете индекс, PHP добавляет индекс автоматически. нет слишком большой разницы между массивом со строкой или целым числом.
Я думаю, что вы можете иметь второй код без проблем.
Если вы хотите упростить массив, как вы упомянули, вы можете использовать ассоциативные массивы. Тем не менее, этот подход подходит, только если URL имеет уникальные значения:
$tArray = array($tUrl1 =>array(
'param' => array(
'noindex' => false,
'header' => true,
'footer' => true,
'sidebar' => true
)
),
$tUrl2 =>array(
'param' => array(
'noindex' => false,
'header' => true,
'footer' => true,
'sidebar' => true
)
)
)
Преимущество использования этого подхода заключается в простоте вызова вложенных значений, таких как param.
$tArray[$tUrl1]['param'];
Лучшее решение, которое я нашел, это использование констант класса и побитовых операторов.
// Here we declare constants
const NOINDEX = 0b00000001,
HEADER = 0b00000010,
FOOTER = 0b00000100,
SIDEBAR = 0b00001000;
// Here is array that I can understand without comparing boolean values with documentation
$urls = array(
array('url' => 'http://someurl.com/', 'param' => self::NOINDEX | self::HEADER | self::FOOTER),
array('url' => 'http://somesecondurl.me/blogs', 'param' => self::HEADER | self::FOOTER | self::SIDEBAR),
...
//And of course using it
$param = $urls[i]['param'];
if ($param & self::HEADER) // Means that url have param HEADER
if ($param & self::FOOTER) ...
if ($param & self::SIDEBAR) ...