【PHP 自定义arrayView(),递归循环打印复杂数组,返回有格式的HTML】

最近忙着实现安卓APP和小程序的产品,同时研究实时音视频、直播、人脸识别、声纹识别等功能开发,综合体验了各种设计思路,感觉受益颇多。丰富的开发内容很有意思,思路也更加活跃,后续有时间了会推出相关文章分享经验。

调试时常会需要打印数据,为了将数据和内容放在一个页面对照看,实现了如下效果:


分享这段代码,直接可用(一切尽在代码与注解中):

  function arrayView($data){
    // script脚本弹窗渲染,建议用let替代var,详见ES6
    return "<script>
        let w=window.screen.availWidth;
        let h=window.screen.availHeight;
        let leftdist=window.screenLeft+w*0.65;
        let topdist=(window.screenTop+h*0.025);
        let win=window.open('about:blank','_blank','width='+w*0.3+',height='+h*0.9+',left='+leftdist+',top='+topdist);
        win.document.title='PHP-ArrayView by PZN'
        win.document.body.innerHTML='<div><span style=\"font-size:18px;font-weight:600;color:#e7c89c\">thisData</span> : ".arrToHtml($data)."</div>'
    </script>";
  }
  function arrToHtml($data){
    $str='<i style="color: #2196f3;font-size:12px">array['.count($data).']</i><div style="margin-left:30px;word-break:break-all">';
    foreach ($data as $k => $v) {
        // 夹杂了许多html渲染语法,不要受影响,其实核心就是判断数组还是字符串,然后回调
        is_array($v) ? $str.='<span style="color: #e7c855;">'.$k.'</span> : '.arrToHtml($v) : $str.='<div>'.$k.' : '.$v.',</div>';
    }
    return $str.'</div>';
  }

若在框架的类中可能方法定义和指向需要稍作修改,最后调用即可。

测试数据:

$data=json_decode('{"code":0,"message":"OK","data":{"session_id":"","image_height":923,"image_width":690,"face":[{"face_id":"2663720011028259582","x":183,"y":261,"height":337.0,"width":337.0,"pitch":-1,"roll":-1,"yaw":0,"age":19,"gender":99,"glass":true,"expression":0,"glasses":1,"mask":0,"hat":0,"beauty":76,"face_shape":{"face_profile":[{"x":214,"y":350},{"x":212,"y":381},{"x":213,"y":412},{"x":216,"y":443},{"x":222,"y":474},{"x":233,"y":503},{"x":248,"y":530},{"x":269,"y":553},{"x":293,"y":572},{"x":321,"y":587},{"x":351,"y":592},{"x":382,"y":587},{"x":410,"y":574},{"x":435,"y":555},{"x":457,"y":533},{"x":473,"y":507},{"x":485,"y":478},{"x":492,"y":448},{"x":497,"y":418},{"x":499,"y":387},{"x":499,"y":359}],"left_eye":[{"x":261,"y":351},{"x":273,"y":357},{"x":286,"y":358},{"x":300,"y":356},{"x":313,"y":352},{"x":302,"y":341},{"x":287,"y":338},{"x":272,"y":341}],"right_eye":[{"x":443,"y":354},{"x":431,"y":359},{"x":418,"y":360},{"x":404,"y":358},{"x":392,"y":353},{"x":403,"y":344},{"x":417,"y":341},{"x":432,"y":344}],"left_eyebrow":[{"x":241,"y":320},{"x":262,"y":318},{"x":283,"y":318},{"x":304,"y":319},{"x":325,"y":319},{"x":307,"y":305},{"x":283,"y":302},{"x":260,"y":305}],"right_eyebrow":[{"x":467,"y":329},{"x":445,"y":326},{"x":423,"y":325},{"x":400,"y":325},{"x":378,"y":324},{"x":398,"y":310},{"x":424,"y":307},{"x":449,"y":311}],"mouth":[{"x":305,"y":501},{"x":317,"y":515},{"x":333,"y":524},{"x":352,"y":527},{"x":370,"y":525},{"x":387,"y":516},{"x":400,"y":503},{"x":385,"y":489},{"x":368,"y":479},{"x":353,"y":483},{"x":337,"y":478},{"x":320,"y":487},{"x":321,"y":501},{"x":336,"y":502},{"x":352,"y":503},{"x":368,"y":502},{"x":384,"y":502},{"x":384,"y":499},{"x":368,"y":498},{"x":352,"y":498},{"x":337,"y":497},{"x":321,"y":498}],"nose":[{"x":353,"y":419},{"x":353,"y":354},{"x":342,"y":373},{"x":332,"y":392},{"x":321,"y":411},{"x":308,"y":434},{"x":331,"y":446},{"x":351,"y":449},{"x":371,"y":448},{"x":394,"y":437},{"x":383,"y":413},{"x":373,"y":393},{"x":363,"y":374}]}}]}}',true);



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值