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