我有大量的数组,其中包含下一个元素:
array(
array('url' => 'http://someurl.com', 'param' => array(false,true,true,true)),
array(...),
array(...),
...
)
"布尔"值表示一些参数(noindex,页眉,页脚,侧边栏)。
我需要修改这个数组以更好地理解(一些用户无法理解"布尔"值的含义)。
我可以像这样添加参数名称:
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) ...