PHP数组结构,简化理解
PHP array structure, simplify for understanding
我有大量包含下一个元素的数组:
array(
array('url' => 'http://someurl.com', 'param' => array(false,true,true,true)),
array(...),
array(...),
...
)
"boolean" 值表示一些参数(无索引、页眉、页脚、侧边栏)。
我需要修改这个数组以便更好地理解(有些用户无法理解 "boolean" 值的含义)。
我可以像这样添加参数名称:
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'];
我找到的最佳解决方案是使用 class 常量和按位运算符。
// 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) ...
我有大量包含下一个元素的数组:
array(
array('url' => 'http://someurl.com', 'param' => array(false,true,true,true)),
array(...),
array(...),
...
)
"boolean" 值表示一些参数(无索引、页眉、页脚、侧边栏)。
我需要修改这个数组以便更好地理解(有些用户无法理解 "boolean" 值的含义)。
我可以像这样添加参数名称:
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'];
我找到的最佳解决方案是使用 class 常量和按位运算符。
// 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) ...