Структура массива PHP, упрощенная для понимания

У меня есть массивный массив со следующими элементами:

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(...),
...
)

но этот метод слишком сильно увеличивает размер массива.

Как я могу упростить массив?

Спасибо!

0

Решение

Нет способа изменить понимание, не заплатив за это цену.

Единственный способ — добавить комментарий к массиву.

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 добавляет индекс автоматически. нет слишком большой разницы между массивом со строкой или целым числом.

Я думаю, что вы можете иметь второй код без проблем.

0

Другие решения

Если вы хотите упростить массив, как вы упомянули, вы можете использовать ассоциативные массивы. Тем не менее, этот подход подходит, только если 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'];
0

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

// 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) ...
0
По вопросам рекламы [email protected]