0

我有以下一组客户数据:

Array
(
    [0] => Array
        (
            [client_id] => 3680
            [firstname] => Brian
            [surname] => May
            [company] => 
        )

    [1] => Array
        (
            [client_id] => 3688
            [firstname] => Freddie
            [surname] => Mercury
            [company] => 
        )

    [2] => Array
        (
            [client_id] => 3694
            [firstname] => Roger
            [surname] => Taylor
            [company] => 
        )
)

我想在表格中显示它,但是如果任何元素在所有情况下都为空(例如本例中的“公司”),我不想在表格中显示该列。

谁能建议在不首先遍历整个数组的情况下如何做到这一点?

4

4 回答 4

1

在这种情况下你不能避免循环,所以我能想到的最好的方法是:

<?php

$test = array
            (
        array
        (
            client_id => 3680,
            firstname => 'Brian',
            surname => 'May',
            company => null
        ),

        array
        (
            client_id => 3688,
            firstname => 'FreddieFreddie',
            surname => 'Mercury',
            company => null
        ),

        array
        (
            client_id => 3694,
            firstname => 'Roger',
            surname => 'Taylor',
            company => null
        )
);

$empty_columns = false;
foreach ($test as $item) {
    $keys = array_keys($item, null, true);

    if (count($keys) == 0)
    {
        $empty_columns = null;
        break;
    }

    if ($empty_columns===false)
        $empty_columns = $keys;

    $empty_columns= array_intersect($empty_columns, $keys); 
}
print_r($empty_columns);        
?>

$empty_columns 将返回一个数组,其中所有值为 NULL 的列;在这个例子中:

Array
(
    [0] => company
)

只需在打印列之前检查此数组。

于 2012-10-16T11:18:16.863 回答
0

您可以使用

$array = array(
        array('client_id' => 3680,'firstname' => 'Brian','surname' => 'May','company' => NULL),
        array('client_id' => 3688,'firstname' => 'Freddie','surname' => 'Mercury','company' => ''),
        array('client_id' => 3694,'firstname' => 'Roger','surname' => 'Taylor','company' => 'Hello World'));

print("<table>");
foreach ( $array as $list ) {
    print("<tr>");
    $col = array();
    foreach ( $list as $value ) {
        empty($value) or $col[] = $value;
    }

    if (count($col) != count($list)) {
        $ele = array_pop($col);
        foreach ( $col as $td ) {
            printf("<td>%s</td>", $td);
        }
        printf("<td colspan=\"2\">%s</td>", $ele);
    } else {
        foreach ( $col as $td ) {
            printf("<td>%s</td>", $td);
        }
    }
    print("</tr>");
}
print("</table>");

输出

<table>
   <tr>
      <td>3680</td>
      <td>Brian</td>
      <td colspan="2">May</td>
   </tr>
   <tr>
      <td>3688</td>
      <td>Freddie</td>
      <td colspan="2">Mercury</td>
   </tr>
   <tr>
      <td>3694</td>
      <td>Roger</td>
      <td>Taylor</td>
      <td>Hello World</td>
   </tr>
</table>
于 2012-10-16T10:52:16.613 回答
-1

$array >> 你的数组

foreach($array as $arr){

    if( !empty($arr['client_id']) &&  !empty($arr['firstname']) && !empty($arr['surname']) &   !empty($arr['company']) ){

        //show that column

    }else{

        //Don't show

    }

}
于 2012-10-16T10:40:56.300 回答
-1

检查所有空值的代码

$company=1;
foreach($yoyrary as $ary)
{
  if($ary[company]==null)
  {
   $company++
  }
}

现在代码显示表

    <table>
    <th>client_id</th>
<th>firstname</th>
<th>surname</th>
<?php if($company!=count($yourary)){?><th>company</th><?php }?>
    foreach($yoyrary as $ary)
    {
     <td>client_id data</td>
<td>firstname data</td>
<td>surname data</td>
<?php if($company!=count($yourary)){?><td>company data</td><?php }?>
    }?>
    </table>
于 2012-10-16T10:42:36.600 回答