PHP数组结构,简化了解

时间:2015-01-22 13:16:51

标签: php arrays parameters structure

我有下一个元素的大量数组:

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

但是这种方法过多地增加了数组大小。

如何简化数组?

谢谢!

3 个答案:

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