PHP数组结构,简化理解


PHP array structure, simplify for understanding

我有大量的数组,其中包含下一个元素:

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