2016-07-25 9 views
-1

私は、最初のインデックスのユーザー、次のインデックスでそのユーザーに割り当てられたブック、そしてこのように割り当てられたブックの詳細を持つライブラリ管理システムの配列を持っています。 PHP:traversing multidimensional array

この

enter image description here

Array 
(
    [user] => Array 
     (
      [0] => stdClass Object 
       (
        [id] => 5 
        [name] => 
        [email] => [email protected] 
        [password] => test 
        [role] => 
        [status] => 1 
       ) 

     ) 

    [books] => Array 
     (
      [0] => stdClass Object 
       (
        [id] => 1 
        [user_id] => 5 
        [book_id] => 1 
        [date_issue] => 2016-07-24 00:00:00 
        [date_return] => 2016-07-25 00:00:00 
       ) 

      [1] => stdClass Object 
       (
        [id] => 2 
        [user_id] => 5 
        [book_id] => 2 
        [date_issue] => 2016-07-24 00:00:00 
        [date_return] => 2016-07-25 00:00:00 
       ) 

      [2] => stdClass Object 
       (
        [id] => 3 
        [user_id] => 5 
        [book_id] => 1 
        [date_issue] => 2016-07-25 00:00:00 
        [date_return] => 2016-07-25 00:00:00 
       ) 

     ) 

    [bookdata] => Array 
     (
      [0] => Array 
       (
        [0] => stdClass Object 
         (
          [id] => 1 
          [title] => PHP Made Easy 
          [author] => Dietel & Dietel 
          [serial_no] => 232323 
          [qty] => 9 
          [row_no] => 1 
          [col_no] => 2 
          [status] => 1 
          [category_id] => 1 
          [description] => This is a book about php 
         ) 

       ) 

      [1] => Array 
       (
        [0] => stdClass Object 
         (
          [id] => 2 
          [title] => C++ 
          [author] => Dietel & Dietel 
          [serial_no] => 232323 
          [qty] => 9 
          [row_no] => 1 
          [col_no] => 2 
          [status] => 1 
          [category_id] => 1 
          [description] => This is a book about c++ 
         ) 

       ) 

      [2] => Array 
       (
        [0] => stdClass Object 
         (
          [id] => 1 
          [title] => PHP Made Easy 
          [author] => Dietel & Dietel 
          [serial_no] => 232323 
          [qty] => 9 
          [row_no] => 1 
          [col_no] => 2 
          [status] => 1 
          [category_id] => 1 
          [description] => This is a book about php 
         ) 

       ) 

     ) 

) 

これは私がこの

foreach ($data as $key=> $value) { 
     echo $key[$value]->id; 
    } 

のように私は

を取得し、エラーを解析しようとする方法である私は、表形式で表示するために必要なものです

重大度:警告

メッセージ:ビュー/ history.php

行番号:4

してみてください、私はこの配列オブジェクトこの配列

+0

「解析する」とはどういう意味ですか?期待される結果は何ですか?代わりに "横断"を意味しますか? – fantaghirocco

+0

あなたが望む最終出力を投稿してください –

+0

私はhtmlテーブルでこれらの結果を印刷する必要があることを意味します – Sikander

答えて

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; 
} 

これは、あなたの質問に対する実際の直接の答えではありませんが、私は答えは:)答えとしてマークを助けている場合は、あまりにもこのように試みることができることを示唆しています下に使用することができます。

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. これ以降、キー/レコードごとに空の配列にデータを追加してループを開始することができます。このキーはテーブルにループするのに役立ちます...

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テーブルを作成できます。

0

アレイごとに1人のユーザーしかいないため、アレイをループすることができます。 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; 
関連する問題