我有下一个元素的大量数组:
array(
array('url' => 'http://someurl.com', 'param' => array(false,true,true,true)),
array(...),
array(...),
...
)
“boolean”值表示一些参数(noindex,header,footer,sidebar)。
我需要修改这个数组以便更好地理解(某些用户无法理解“boolean”值是什么意思)。
我可以添加这样的参数名称:
array(
array(
'url' => 'http://someurl.com',
'param' => array(
'noindex' => false,
'header' => true,
'footer' => true,
'sidebar' => true
)
),
array(...),
array(...),
...
)
但是这种方法过多地增加了数组大小。
如何简化数组?
谢谢!
答案 0 :(得分: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会自动添加索引。数组与字符串或整数之间没有太大差别。
我认为你可以有第二个代码而没有任何问题。
答案 1 :(得分: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'];
答案 2 :(得分: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) ...