求助:数组遍历并输出的问题!!

scybjjg 2018-11-06 04:26:24
我是业余菜鸟,求各位大神贴出较完整的代码!! 拜谢了!!
<?php
$re = array(
"部门"=> array("检验科" ,"检验科"),
"开单医生"=> array("管理员","管理员"),
"登记时间"=> array("2018-10-29","2018-11-02"),
"材料费"=> array(NULL ,NULL),
"彩超费"=> array( NULL,NULL) ,
"其他费"=> array( '22.45',NULL
);
//创建表格将数组循环输入
echo '<table border="1" width="600" align="center">';
echo '<tr bgcolor="#dddddd">';
foreach ($re as $key =>$value)
{
echo "<th>".$key."</th>";
foreach($value as $mn)
{
echo "<td>{$mn}</td>";
}
echo '</tr>';
}
echo '</table>';
?>
现在输出的结果如下:

希望的结果如下:【材料费 彩超费 都是 null 所以不输出 需要竖向显示】如图!

...全文
125 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
scybjjg 2018-11-07
  • 打赏
  • 举报
回复
非常感谢,已经OK了!! 我是初学 加 业余,菜鸟中的菜鸟!! 我是从oracle 数据库里面来的,不知道有啥方法可以得到数据库中相同的样子!! 我用的的 $row = oci_fetch_all($stid, $re); 这个 ,得到的数组就是我贴出来的样子!!! 用你的方法也完全解决了!!!! 非常感谢!!
scybjjg 2018-11-07
  • 打赏
  • 举报
回复
引用 5 楼 qq_23033339 的回复:
if (empty(array_filter($value))) { //这地方报错,Can't use function return value in write context in(不能在写入上下文中使用函数返回值) 是什么原因呢? continue; } 你php版本太低了,你改成if (!array_filter($value)) 这样吧
非常感谢,已经OK了!! 我是初学 加 业余,菜鸟中的菜鸟!!
xuzuning 2018-11-07
  • 打赏
  • 举报
回复
本来转置数据应该在查询时或读取数据时就完成的
之所以那么写,是为了弥补你前期工作的不足
支持闭包,但不支持数组简写,可见你的 php 是 5.3 的。现在都 7.几 了,总得让自己跟上时代吧?
我哪样写有点限制死了?
是这个 return $v != [null, null]; ?
是有点,是有两列!应是 return count(array_diff($v, [null])) > 0; //全为 null 的数组,去掉 null,就是空数组了

如果说你的数据是从数据库得来的
那么显然你是在骗人了
因为数据库中的数据,本来就是按你需要显示的样子存放的
你是里的数据是从数据库数据转置而来的,现在又要转置会去。不是多此一举吗?
下雨的声音丶 2018-11-07
  • 打赏
  • 举报
回复
if (empty(array_filter($value))) { //这地方报错,Can't use function return value in write context in(不能在写入上下文中使用函数返回值) 是什么原因呢? continue; } 你php版本太低了,你改成if (!array_filter($value)) 这样吧
scybjjg 2018-11-07
  • 打赏
  • 举报
回复
引用 2 楼 qq_23033339 的回复:

$re = array(
            "部门"=> array("检验科" ,"检验科"),
            "开单医生"=> array("管理员","管理员"),
            "登记时间"=> array("2018-10-29","2018-11-02"),
            "材料费"=> array(NULL ,NULL),
            "彩超费"=> array( NULL,NULL) ,
            "其他费"=> array( '22.45',NULL)
        );
        $new_data = array();
        $keys = array();
        foreach ($re as $key => $value) {
            if (empty(array_filter($value))) {   //这地方报错,Can't use function return value in write context in(不能在写入上下文中使用函数返回值)  是什么原因呢?
                continue;
            }
            $keys[] = $key;
            $new_data[] = $value;
        }
        array_unshift($new_data, null);
        $new_data = call_user_func_array('array_map', $new_data);  
        //创建表格将数组循环输入
        echo '<table border="1" width="600" align="center">';
        echo '<tr bgcolor="#dddddd">';
        foreach ($keys as $key =>$value)
        {
            echo "<th>{$value}</th>";
        }
        echo '</tr>';
        foreach ($new_data as $key =>$value)
        {
            echo '<tr>';
            foreach($value as $mn)
            {
                echo "<td>{$mn}</td>";
            }
            echo '</tr>';
        }
        echo '</table>';
非常感谢,13行报错,我自己不知道啥原因,请不吝赐教!! 我的数组本来是通过sql语句获得的,感觉你这个更灵活, 但是那个错我不知道是什么原因引起的,我自己不会修改!!
scybjjg 2018-11-07
  • 打赏
  • 举报
回复
引用 1 楼 xuzuning 的回复:
$re = array(
  "部门"=> array("检验科" ,"检验科"),
  "开单医生"=> array("管理员","管理员"),
  "登记时间"=> array("2018-10-29","2018-11-02"),
  "材料费"=> array(NULL ,NULL),
  "彩超费"=> array( NULL,NULL) ,
  "其他费"=> array( '22.45',NULL)
  );
$a = array_filter($re, function($v) {return $v != [null, null];});   //这个地方要写成  {return $v != array(null,null);}  我是改成这样,可以的!我是菜鸟哈!
$t = call_user_func_array('array_map', array_merge([null], $a));  // 这个地方也是改成 这样 , array_merge(array(null), $a)); 实现的!

echo '<table border="1" width="600" align="center">';
echo '<tr bgcolor="#dddddd">';
echo '<th>' . join('</th><th>', array_keys($a)) . '</th></tr>';
foreach($t as $v) echo '<tr><td>' . join('</td><td>', $v) . '</td></tr>';
echo '</table>';
非常感谢,我那个数组是通过SQL语句得到到,感觉你这样写有点限制死了!! 我贴上数组是方便大家帮我写例子!! 我自己在倒腾倒腾!! 非常感谢!!!
下雨的声音丶 2018-11-06
  • 打赏
  • 举报
回复

$re = array(
            "部门"=> array("检验科" ,"检验科"),
            "开单医生"=> array("管理员","管理员"),
            "登记时间"=> array("2018-10-29","2018-11-02"),
            "材料费"=> array(NULL ,NULL),
            "彩超费"=> array( NULL,NULL) ,
            "其他费"=> array( '22.45',NULL)
        );
        $new_data = array();
        $keys = array();
        foreach ($re as $key => $value) {
            if (empty(array_filter($value))) {
                continue;
            }
            $keys[] = $key;
            $new_data[] = $value;
        }
        array_unshift($new_data, null);
        $new_data = call_user_func_array('array_map', $new_data);
        //创建表格将数组循环输入
        echo '<table border="1" width="600" align="center">';
        echo '<tr bgcolor="#dddddd">';
        foreach ($keys as $key =>$value)
        {
            echo "<th>{$value}</th>";
        }
        echo '</tr>';
        foreach ($new_data as $key =>$value)
        {
            echo '<tr>';
            foreach($value as $mn)
            {
                echo "<td>{$mn}</td>";
            }
            echo '</tr>';
        }
        echo '</table>';
xuzuning 2018-11-06
  • 打赏
  • 举报
回复
$re = array(
"部门"=> array("检验科" ,"检验科"),
"开单医生"=> array("管理员","管理员"),
"登记时间"=> array("2018-10-29","2018-11-02"),
"材料费"=> array(NULL ,NULL),
"彩超费"=> array( NULL,NULL) ,
"其他费"=> array( '22.45',NULL)
);
$a = array_filter($re, function($v) {return $v != [null, null];});
$t = call_user_func_array('array_map', array_merge([null], $a));

echo '<table border="1" width="600" align="center">';
echo '<tr bgcolor="#dddddd">';
echo '<th>' . join('</th><th>', array_keys($a)) . '</th></tr>';
foreach($t as $v) echo '<tr><td>' . join('</td><td>', $v) . '</td></tr>';
echo '</table>';

21,886

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧