-1

配列の関連付けがあります。配列名は $monitorings です。関数print_rを使用して配列値を表示しようとしましたが、出力は次のようになります。

print_r($monitorings);
 //output
 master_monitoring_collection Object ( [position:protected] => 0 [storage:protected] =>   
 Array ( [0] => master_monitoring Object ( [table:protected] => master_monitoring     
 [values:protected] => Array ( [prvd_name] => Axis [prvd_status] => Y [prvd_lastprob]   
 =>[prvd_prob] => [prvd_traffic_sms] => [update_date] => 2011-11-26 22:54:39 ) ) [1] =>   
 master_monitoring Object ( [table:protected] => master_monitoring [values:protected]=> 
 Array ( [prvd_name] => Esia [prvd_status] => Y [prvd_lastprob] => [prvd_prob] => 
 [prvd_traffic_sms] => [update_date] => 2011-11-26 22:54:07 ) )

問題は、このようにしようとすると値を取得できないことです。

foreach($monitorings as $monitoring){
   echo $monitoring['prvd_name'];
}

私を助けてください..

ありがとう...

4

2 に答える 2

0

2 つのことを行うと、出力が読みやすくなります。まず、印刷する前にフォーマット済みタグをエコーし​​ます。次に、print_r() の代わりに var_dump() を使用することを検討してください。

このような構造になっているようです。

//output
master_monitoring_collection Object ( 
   [position:protected] => 0 
   [storage:protected] => Array ( 
      [0] => master_monitoring Object (  
         [table:protected] => master_monitoring     
         [values:protected] => Array (  
            [prvd_name] => Axis 
            [prvd_status] => Y 
            [prvd_lastprob] => 
            [prvd_prob] => 
            [prvd_traffic_sms] => 
            [update_date] => 2011-11-26 22:54:39 ) 
         ) 
      [1] => master_monitoring Object ( 
         [table:protected] => master_monitoring 
         [values:protected]=> Array ( 
            [prvd_name] => Esia 
            [prvd_status] => Y 
            [prvd_lastprob] => 
            [prvd_prob] => 
            [prvd_traffic_sms] => 
            [update_date] => 2011-11-26 22:54:07 
         ) 
      )

値は保護されているため、取得できない場合があります。foreach() 命令のコンテキストが重要です。保護されたオブジェクトにアクセスするには、クラスまたはクラスの拡張内にある必要があります。保護されたプロパティを表示できるコンテキスト内にある場合、反復子は次のようになります。

foreach ($master_monitoring_collection->storage as $storage)
{
    foreach ($storage as $master_monitoring)
    {
        var_dump($master_monitoring->values['prvd_name']);
    }
}

必要に応じて変数名を調整します。幸運を祈ります、~Ray

于 2012-12-23T14:42:31.957 に答える
0

これで問題ないようです。プロパティを「パブリック」に変更したので、別のクラスを作成する必要がなくなりました。可動部分は 80 行目から始まります。

http://www.laprbass.com/RAY_temp_casper.php

<?php // RAY_temp_casper.php
error_reporting(E_ALL);
echo '<pre>';

/* STRUCTURE WE ARE TRYING TO CREATE
master_monitoring_collection Object (
   [position:protected] => 0
   [storage:protected] => Array (
      [0] => master_monitoring Object (
         [table:protected] => master_monitoring
         [values:protected] => Array (
            [prvd_name] => Axis
            [prvd_status] => Y
            [prvd_lastprob] =>
            [prvd_prob] =>
            [prvd_traffic_sms] =>
            [update_date] => 2011-11-26 22:54:39 )
         )
      [1] => master_monitoring Object (
         [table:protected] => master_monitoring
         [values:protected]=> Array (
            [prvd_name] => Esia
            [prvd_status] => Y
            [prvd_lastprob] =>
            [prvd_prob] =>
            [prvd_traffic_sms] =>
            [update_date] => 2011-11-26 22:54:07
         )
      )
*/ // END OF STRUCTURE

Class Master_monitoring
{
    public $table, $values;
    public function __construct($values)
    {
        $this->table = 'master_monitoring';
        $this->values = $values;
    }
}

Class Master_monitoring_collection
{
    public $position, $storage;
    public function __construct($array)
    {
        $this->position = 0;
        $this->storage = $array;
    }
}


$a = array
( 'prvd_name'        => 'Axis'
, 'prvd_status'      => 'Y'
, 'prvd_lastprob'    => NULL
, 'prvd_prob'        => NULL
, 'prvd_traffic_sms' => NULL
, 'update_date'      => '2011-11-26 22:54:39'
)
;
$b = array
( 'prvd_name'        => 'Esia'
, 'prvd_status'      => 'Y'
, 'prvd_lastprob'    => NULL
, 'prvd_prob'        => NULL
, 'prvd_traffic_sms' => NULL
, 'update_date'      => '2011-11-26 22:54:07'
)
;

$aobj = new Master_Monitoring($a);
$bobj = new Master_Monitoring($b);
$mobj = array($aobj, $bobj);
$monitors = new Master_monitoring_collection($mobj);

// DOES IT LOOK RIGHT? (YES)
print_r($monitors);

// SHOW HOW TO USE THE ITERATOR
foreach ($monitors->storage as $mmo)
{
    var_dump($mmo->values['prvd_name']);
}
于 2012-12-23T18:21:28.517 に答える