首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP多维数组,以表格形式显示数据

PHP多维数组,以表格形式显示数据
EN

Stack Overflow用户
提问于 2013-07-17 17:05:09
回答 4查看 1K关注 0票数 0

当我回显数组时,结果是:

代码语言:javascript
复制
$Items = Array( [147] => Array([ItemName] => Array([0]=>White Snack [1]=>Dark Cookie) [ItemCode] => Array([0]=>IT-WS [1]=>IT-DC ) )  [256] => Array([ItemName] => Array([0]=>Soft Sandwiches [1]=>Hard Drinks) [ItemCode] => Array([0]=>IT-SS [1]=>IT-HD )  )) 

现在,我需要以表格形式显示以下结果,即索引147和256,我将从单独的foreach循环中传递它们,以便获得正确的索引值。

-----------147---------------

名称

白零食

黑饼干

-----------256---------------

名称

软三明治?

硬性饮料

我无法做到这一点。请帮帮忙。

代码语言:javascript
复制
    $ItemIndexes = array(147,256);

    foreach($ItemIndexes as $ItemMainIndex)

    {
         //further code here , 
        //here I would send the $ItemMainIndex to the $Items array 
       //and get the corresponding index value and display it accordingly.
    }
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-07-17 18:54:00

数组的结构与显示器的结构不太匹配,所以我制作了一个具有不同结构的新数组。

代码语言:javascript
复制
$prods = array();
foreach ($Items as $key => $group){
    foreach ($group as $attr => $values){
        foreach ($values as $key2 => $value){
            $prods[$key][$key2][$attr] = $value;
        }
    }
}
var_dump($prods);

输出:

代码语言:javascript
复制
Array(
    [147] => Array(
            [0] => Array(
                    [ItemName] => White Snack
                    [ItemCode] => IT-WS
                )
            [1] => Array(
                    [ItemName] => Dark Cookie
                    [ItemCode] => IT-DC
                )
        )
    [256] => Array
            [0] => Array(
                    [ItemName] => Soft Sandwiches
                    [ItemCode] => IT-SS
                )
            [1] => Array(
                    [ItemName] => Hard Drinks
                    [ItemCode] => IT-HD
                )
        )
)

就这样,我做了一张桌子:

代码语言:javascript
复制
$table = '<table>';
foreach ($prods as $key => $group){
    $table .= '<tr><td colspan="2">'.$key.'</td></tr>';
    $table .= '<tr><td>Name</td><td>Code</td></tr>';
    foreach ($group as $key2 => $values){
        $table .= '<tr>';
        foreach ($values as $attr => $value){
            if ($attr == 'ItemCode'){
                $parts = explode('-', $value);
                $table .= '<td>'.$parts[1].'</td>';
            } else {
                $table .= '<td>'.$value.'</td>';
            }
            $prods[$key][$key2][$attr] = $value;
        }
        $table .= '</tr>';
    }
}
$table .= '</table>';

有了一些造型,它可以或多或少地像你展示的那样显示。在您发布的数组中,有一个括号不合适,所以我使用的原始数组的结构是:

代码语言:javascript
复制
$Items = array(147 => array('ItemName' => array(0=>'White Snack',
                                                        1=>'Dark Cookie'),
                                    'ItemCode' => array(0=>'IT-WS',
                                                        1=>'IT-DC')),
            256 => array('ItemName' => array(0=>'Soft Sandwiches',
                                                        1=>'Hard Drinks'),
                                    'ItemCode' => array(0=>'IT-SS',
                                                        1=>'IT-HD')));
票数 1
EN

Stack Overflow用户

发布于 2013-07-17 17:37:42

您可以创建这样的函数:

代码语言:javascript
复制
function echoItemTable($num, &$items){
    $val = $items[$num];
    echo "<h2>".$num."</h2>";
    echo "<table><thead><tr><th>Name</th><th>Code</th></tr></thead>";
    echo "<tbody>";
    foreach ($x = 0, $num = count($val["ItemName"); $x < $num; $x++){
        echo "<tr><td>".$val["ItemName"][$x]."</td>";
        echo "<td>".str_replace("IT-", "", $val["ItemCode"][$x])."</td></tr>";
    }
    echo "</tbody>";
    echo "</table>";
}

并在代码中调用它,就像

代码语言:javascript
复制
$ItemIndexes = array(147,256);

foreach($ItemIndexes as $ItemMainIndex)
{
    echoItemTable($ItemMainIndex, $items);
}
票数 1
EN

Stack Overflow用户

发布于 2013-07-17 17:38:02

下面是一个如何迭代数据结构的示例。

代码语言:javascript
复制
$ItemIndexes = array(147,256);
foreach($ItemIndexes as $ItemMainIndex) {
  $Item = $Items[$ItemMainIndex];

  echo "<h1>-----------$ItemMainIndex---------------</h1>";
  echo "<h2>Name ----------------------------------- Code</h2>";

  $ItemNames = $Item['ItemName'];
  $ItemCodes = $Item['ItemCode'];

  for($i = 0; $i < count($ItemNames); $i++) {
    $Name = $ItemNames[$i];
    $Code = $ItemCodes[$i];   

    $Name = str_pad($Name . ' ', 40, '-');
    echo "$Name $Code<br/>";
  }  
}

这不是特别好的标记--我们可能应该使用某种类型的表--但它为您提供了一些开始。

此外,这是假设256个和147个条目在$Items数组中处于相同的级别,即该数组如下所示:

代码语言:javascript
复制
$Items = Array( 
  147 => Array(
    'ItemName' => Array(0=>'White Snack', 1=>'Dark Cookie' ),
    'ItemCode' => Array(0=>'IT-WS', 1=>'IT-DC' )
  ),
  256 => Array(
    'ItemName' => Array(0=>'Soft Sandwiches', 1=>'Hard Drinks'),
    'ItemCode' => Array(0=>'IT-SS', 1=>'IT-HD' )
  )
);

但这不是你问题中所显示的结构。如果您确实需要支持这种精确的结构,那么代码就会更复杂一些。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17705977

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档