よくわからないforeachのトラップに引っかかったので記載しておく。
class MY_C {
var $PAGE = array();
function __construct( $load=array() )
{
$this->PAGE = Array(
'menu1' => Array(
'PID' => 0,
'NAME' => 'menu1',
'AUTH' => array(1),
'SELECT' => array(),
),
'menu1_1' => Array(
'PID' => 'menu1',
'NAME' => 'menu1_1',
'URL' => array('qa'),
'AUTH' => array(1),
'SELECT' => array(),
),
)
'menu2' => Array(
'PID' => 0,
'NAME' => 'menu2',
'AUTH' => array(1),
'SELECT' => array(),
),
'menu2_1' => Array(
'PID' => 'menu2',
'NAME' => 'menu2_2',
'URL' => array('news'),
'AUTH' => array(1),
'SELECT' => array(),
),
);
$this->set_menu();
}
function set_menu( )
{
$html =& $this->HTML;
$menulist =& $this->PAGE ;
$i = 0;
foreach( $menulist as $id => $m )
{
if( strcmp($m['PID'],0)===0 ){
$tabid = 'navi-'.$i;
// メニュー項目
foreach( $menulist as $m2 )
{
if( strcmp($id,$m2['PID'])===0 ){
$submenu[$tabid][] = li( 'class="menu2"',anchor( $m2['URL'], $m2['NAME'] ) );
}
}
if( count($submenu[$tabid]) !==0 )
{
$menu[] = ul('id="menuUl"',li( 'class="menu1"', $m['NAME'] ) .implode("\n",$submenu[$tabid]) );
}
}
$i++;
}
$html['menu'] = implode("\n",$menu);
return $menu;
}
}
と、したとき set_menu() の
foreach( $menulist as $id => $m )
は、1ループしかしなくて
foreach( $menulist as $m2 )
は、全てループしているという謎の現象が現れた。
しかも、ローカルでは問題ないのに客先のサーバに上げたらこうなった。
結果的には以下の方法で解決。
$menulist =& $this->PAGE ; を $menulist = $this->PAGE ;
これだけで直ったので更に原因不明。
サーバーでなにかやってあるんだろうか・・・。