目前项目中碰到一个难题:php的多维数组(大于4维),输出到模板上之后,无法正常解析,导致第三层循环里没有数据。本地开发环境:vertrigoserv(php6.2.6+mysql5.1+apache),模板使用的是smarty。在此环境下程序执行正常,在模板上面有<tpl>$array[0][body][0][body][0].name</tpl>这样的语句也能正常输出。三重循环也能取到所有的数据。服务器环境: IIS6.0+php5.2.5+mysql5.0 在服务器上从php文件直接echo $array[0][body][0][body][0][name],页面输出正常结果。但是这个$array传给模板后,在模板上只能取到四维数组的结果,如<tpl>$array[0][body][0].name</tpl>正常输出,但是<tpl>$array[0][body][0][body][0].name</tpl>就没有任何值了。 调试步骤:1.怀疑是php版本问题,于是将本地开发环境换成php5.2.5,本机上仍然正常。2.在模板上设置中间变量,将四维数组给中间变量,再输出仍然不正常(server上)。 因为服务器是几个网站公用的,不方便修改调试,单机上也没有IIS,不知道到底是什么原因。 虽然我采用别的逻辑,将数组降维,解决了这个问题,但还是想搞清楚为什么会有这样的现象。近来项目比较紧,这个问题先放这里,以后慢慢研究,也希望看到这篇文章的高人点拨一下。
解决方案 »
- php调用websercice 传进去两个base64Binary类型的参数 怎么写啊
- adodb 能不能支持php5
- 请教个数据的问题,请帮忙!
- "#(?=((<(table)[^>]*>)((?:(?:[^<]|<(?!table))*?|(?1))*)(</table>)))#ise 也就是整个表达式匹配结果(0项)怎么是空的 ?
- 各位朋友,请帮个忙。
- 第一次来,php运行环境搞不定
- 这个问题难吗?有关php超连接.
- 【ThinkPHP】诡异的现象,$this->rowUser['ext'] = '';无法赋值!但是array_merge 却可以!
- PHP中请教一个关于soap webservice的问题.在线等..
- 请教个问题 地址栏不变 内容改变 没看到发生任何跳转跟框架之类的
- fckeditor如何使用????
- 怎么把查询功能与更新功能写在以个PHP页中
$remind = array(
array('name'=>$lang_obj->_lang['langResumeSale'],'tag'=>'saler','body'=>array(
array('name'=>$lang_obj->_lang['langResumeBabyManage'],'tag'=>'sale_product','body'=>array(
array('name'=>$lang_obj->_lang['langResumeBabyMoveOther'],'tag'=>'sale_product_move','mail_check'=>'1','mail_disabled'=>'1','msg_check'=>'0','msg_disabled'=>'0','must'=>'1'),
array('name'=>$lang_obj->_lang['langResumeBabyDelOther'],'tag'=>'sale_product_del','mail_check'=>'1','mail_disabled'=>'1','msg_check'=>'0','msg_disabled'=>'0','must'=>'1'),
array('name'=>$lang_obj->_lang['langResumeBabyDownOther'],'tag'=>'sale_product_down','mail_check'=>'1','mail_disabled'=>'1','msg_check'=>'0','msg_disabled'=>'0','must'=>'1'),
),
),
)
),
array('name'=>$lang_obj->_lang['langResumeBuyRemind'],'tag'=>'buyer','body'=>array(
array('name'=>$lang_obj->_lang['langResumeMessageInform'],'tag'=>'buyer_message','body'=>array(
array('name'=>$lang_obj->_lang['langResumeBabyMessageBySaleInform'],'tag'=>'buyer_message_seller_product_answer','mail_check'=>'1','mail_disabled'=>'0','msg_check'=>'0','msg_disabled'=>'0','must'=>'0'),
array('name'=>$lang_obj->_lang['langResumeShopMessageBySaleInform'],'tag'=>'buyer_message_seller_shop_answer','mail_check'=>'0','mail_disabled'=>'0','msg_check'=>'0','msg_disabled'=>'0','must'=>'0'),
),
),
)
),
array('name'=>$lang_obj->_lang['langResumeComplaintLawRemind'],'tag'=>'complaint','body'=>array(
array('name'=>$lang_obj->_lang['langResumeLaw'],'tag'=>'complaint_other_answer','body'=>array(
array('name'=>$lang_obj->_lang['langResumeMyComplaintLawSideInform'],'tag'=>'complaint_other_answer_notice','mail_check'=>'1','mail_disabled'=>'0','msg_check'=>'1','msg_disabled'=>'0','must'=>'1'),
),
),
)
),
);
foreach ($remind as $k => $v){
if (is_array($v['body'])){
foreach ($v['body'] as $k2 => $v2){
if (is_array($v2['body'])){
foreach ($v2['body'] as $k3 => $v3){
$line = @explode('|',$array[$v3['tag']]);
$remind[$k]['body'][$k2]['body'][$k3][$v3['tag']] = array('mail_check'=>$line[0],'msg_check'=>$line[1]);
}
}
}
}
}
//print_r($remind_array);此时两个环境下都会输出正确的数组
$this->output('remind_array',$remind);//变量输出到模板
$this->showpage('own_remind.manage');//调用页面
?>模板输出代码<tpl> $remind_array[0][body][0].name </tpl>//有值
<tpl> $remind_array[0][body][0][body][0].name </tpl>//空值
<tpl> foreach from=$remind_array item=one </tpl>
<tpl> foreach from=$one.body item=two </tpl>
<tpl> foreach from=$two.body item=three </tpl>
//这里的<tpl>$three.name</tpl>值就为空
<tpl> /foreach </tpl>
<tpl> /foreach </tpl>
<tpl> /foreach </tpl>
这不是smarty吧?
<tpl> $remind_array[0].body[0].body[0].name </tpl>//空值
<tpl> foreach from=$remind_array item=one </tpl>
<tpl> foreach from=$one.body item=two </tpl>
<tpl> foreach from=$two.body item=three </tpl>
//这里的<tpl>$three.name</tpl>值就为空
<tpl> /foreach </tpl>
<tpl> /foreach </tpl>
<tpl> /foreach </tpl>