よくわからない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 ;

これだけで直ったので更に原因不明。
サーバーでなにかやってあるんだろうか・・・。