PHP:遍历多维数组

时间:2016-07-25 07:39:35

标签: php arrays codeigniter multidimensional-array

我在图书馆管理系统中有一个数组,其中第一个索引上有用户,下一个索引上分配给该用户的书籍,然后是这样分配的书籍的详细信息。

这是我需要以表格形式显示的内容

documentation

ggplot(FebMarTot2,aes(x=Month, y=Total)) + geom_line()

这就是我尝试像这样解析的方式

qplot(x=PV, y=Total, data=test)

我得到的错误

  

严重性:警告

     

消息:非法偏移类型

     

文件名:views / history.php

     

行号:4

请帮我解析一下这个数组

4 个答案:

答案 0 :(得分:0)

这个数组对象,尝试使用像这样的对象作为数组。

$data_new = (array) $data;

这会将您的数组对象转换为数组格式。之后您可以将其传递给foreach。 或者你可以使用以下功能

function object_to_array($obj) {
    $arr = is_object($obj) ? get_object_vars($obj) : $obj;
    foreach ($arr as $key => $val) {
            $val = (is_array($val) || is_object($val)) ? object_to_array($val) : $val;
            $arr[$key] = $val;
    }
    return $arr;
}

这不是你问题的实际直接答案,但我建议你也可以尝试这种方式,如果答案有帮助标记为答案:)。

答案 1 :(得分:0)

我建议你这样做,

  1. 停止循环此类多维数组。如果您期望在帖子中显示输出,则此阵列形成是错误的。

  2. 尝试删除额外不必要的嵌套

            [0] => Array (
                [0] => stdClass Object
                    (
                        [id] => 1
                        [title] => PHP Made Easy 
    
  3. 将数组划分并将其保存在不同的变量中,例如

    $ userInfo = $ array [user] [0];

    $ books = $ array [books];

    $ bookdata = $ array [bookdata];

  4. 此后,您可以循环并开始向空数组添加数据,保持键/每条记录。此密钥将帮助您将其循环到表格中......

答案 2 :(得分:0)

根据你的数组结构,它是一个数组对象。

您必须使用调用数组键名来遍历主循环中的数组对象。所以你可以这样做。

//main loop
foreach ($data  as  $key=> $value) {

    //get user info
    echo $value['user'][0]->id;

    //get books info
    for($i=0; $i < count($value['books']); $i++) {
        echo $value['books'][$i]->id;
    }

    //get further books info
    foreach($value['bookdata'] as $books) {
        echo $books->author;
    }

}

现在您可以使用它来填充HTML表格。

答案 3 :(得分:0)

由于每个阵列只有一个用户,因此您可以遍历数组;使用conditional Logic来决定当前密钥(如书籍,用户)......然后,您可以构建一个包含所需输出的HTML表格。测试可能在订单和you can find the test here

<?php

    $tblOutput  = "<div class='books-wrapper col-md-12'>"                               . PHP_EOL;
    if(!empty($arrBkLib)){

        foreach($arrBkLib as $key=>$data){
            if($key == 'user' && !empty($data[0])){
                $userName   = isset($data[0]->name) ? $data[0]->name : "N/A";

                $tblOutput .= "<div class='user-data-pane col-md-6  pull-left'>"        . PHP_EOL;
                $tblOutput .= "<span class='btn btn-custom'>{$userName}</span>"         . PHP_EOL;
                $tblOutput .= "</div>"                                                  . PHP_EOL;

                $tblOutput .= "<div class='action-pane  col-md-6  pull-right'>"         . PHP_EOL;
                $tblOutput .= "<a class='btn btn-custom'>Ban User</a>"                  . PHP_EOL;
                $tblOutput .= "</div>"                                                  . PHP_EOL;


                $tblOutput .= "<table class='tbl-books-data'>"                          . PHP_EOL;

                $tblOutput .= "<tr class='tbl-books-data-head-row'>"                    . PHP_EOL;
                $tblOutput .= "<th class='tbl-books-data-head-cell'>Book</th>"          . PHP_EOL;
                $tblOutput .= "<th class='tbl-books-data-head-cell'>Issue Date</th>"    . PHP_EOL;
                $tblOutput .= "<th class='tbl-books-data-head-cell'>Return Date</th>"   . PHP_EOL;
                $tblOutput .= "<th class='tbl-books-data-head-cell'>Fine</th>"          . PHP_EOL;
                $tblOutput .= "<th class='tbl-books-data-head-cell'>Status</th>"        . PHP_EOL;
                $tblOutput .= "</tr>"                                                   . PHP_EOL;

            }else if($key == 'books' && !empty($data)){
                foreach($data as $iKey=>$books) {
                    $issueDate  = isset($books->date_issue)    ? date("d/m/Y", strtotime($books->date_issue))   : "N/A";
                    $returnDate = isset($books->date_return)   ? date("d/m/Y", strtotime($books->date_return))  : "N/A";
                    $bookName   = isset($arrBkLib['bookdata'][$iKey]->title)    ? $arrBkLib['bookdata'][$iKey]->title   : "N/A";
                    $status     = isset($arrBkLib['bookdata'][$iKey]->status)   ? $arrBkLib['bookdata'][$iKey]->status  : "N/A";
                    $fine       = "N/A";    // USE YOUR LOGIC HERE TO DETERMINE THIS VALUE...

                    $tblOutput .= "<tr class='tbl-books-data-row'>"                     . PHP_EOL;
                    $tblOutput .= "<th class='tbl-books-data-cell'>{$bookName}</th>"    . PHP_EOL;
                    $tblOutput .= "<th class='tbl-books-data-cell'>{$issueDate}</th>"   . PHP_EOL;
                    $tblOutput .= "<th class='tbl-books-data-cell'>{$returnDate}</th>"  . PHP_EOL;
                    $tblOutput .= "<th class='tbl-books-data-cell'>{$fine}</th>"        . PHP_EOL;
                    $tblOutput .= "<th class='tbl-books-data-cell'>{$status}</th>"      . PHP_EOL;
                    $tblOutput .= "</tr>"                                               . PHP_EOL;
                }
            }
        }
        $tblOutput .= "</table>" . PHP_EOL;
        $tblOutput .= "</div>"   . PHP_EOL;
    }

echo $tblOutput;