PHPのクラスの配列の値をシンプルに取得したいのですが方法がわかりません。


PHPで以下のクラスを作成します。

$obj = new DB_Table();
$obj->table = 'hana';

$obj->dbList();

$obj->dbList()の値が仮に
array('1'=>'ume','2'=>'sakura','3'=>'kiku')とします。

3のキーの値「kiku」を出力したいのですが

$obj->dbList()[3];

とするとエラーで出力できません。

$array = $obj->dbList();
echo $array[3];

とすれば「kiku」が出力できるのですが余計な作業が挟まり
シンプルではありません。

$obj->dbList()から一発で「kiku」を出力するにはどのように記述すれば良いのでしょうか?

ご教授のほど宜しくお願いいたします。

回答の条件
  • 1人2回まで
  • 登録:
  • 終了:2011/04/06 16:20:03
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:zero-uhura No.5

回答回数14ベストアンサー獲得回数3

ポイント80pt

未検証ですが、どうかな?

class DB_Table {

 public function dbList($index = null){

  $array = array(1=>'ume', 2=>'sakura', 3=>'kiku');

  if($this->table == 'hana'){

   if ($index !== null) {

    if (array_key_exists($index, $array)) {

     return $array[$index];

    } else {

     return false; // 対象のインデックスない場合の処理

    }

   } else {

    return $array;

   }

  }

 }

}

... 省略 ...

echo $obj->dbList(2); // sakura が出力

id:gelgelgel

ご回答ありがとうございます

なるほど!!こういう設定の仕方もあるのですね。

知りたかった方法と違いますが、要件満たせました!!

ありがとうございました。

2011/04/06 16:17:10

その他の回答4件)

id:asuka645 No.1

回答回数856ベストアンサー獲得回数97

ポイント10pt

ご質問のスクリプトは途中が省略されていると思うのですが、下記のようにしてみてください。

<?php
class DB_Table {
    var $table, $dbList;
}
$obj = new DB_Table();
$obj->table = 'hana';
echo $obj->table;
echo '<br />';
$obj->dbList = array('1'=>'ume','2'=>'sakura','3'=>'kiku');
echo $obj->dbList[3];
?>
id:asuka645 No.2

回答回数856ベストアンサー獲得回数97

ポイント10pt

追伸


もしclass内で配列を定義したいのであれば、下記のようになります。

<?php
class DB_Table {
    var $table;
    var $dbList = array('1'=>'ume','2'=>'sakura','3'=>'kiku');
}
$obj = new DB_Table();
$obj->table = 'hana';
echo $obj->table;
echo '<br />';
echo $obj->dbList[3];
?>
id:gelgelgel

ご回答ありがとうございます。

省略し過ぎで分かりにくくなったのかと思いますが、私の質問の意図と違っています。

$obj->dbList();は設定する値ではなくクラスから返される値です。

class DB_Table {

 public function dbList(){

  if($this->table == 'hana'){

   return array('1'=>'ume','2'=>'sakura','3'=>'kiku');

  }

 }

}

$obj = new DB_Table();

$obj->table = 'hana';

$obj->dbList();

ということです。この$obj->dbList();から一発で「kiku」を出力したいのです。

※このクラスはあくまでの例なのでこんなクラス自体を使用する必要性自体がないといったご回答はお控えください。

2011/04/06 11:24:49
id:la-la-land No.3

回答回数58ベストアンサー獲得回数6

ポイント10pt

echo(array_pop($obj->dbList()));

これで取り出せます。

id:gelgelgel

ご回答ありがとうございます。

確かに取り出せるのですが、これだと末尾しかダメですよね・・

任意のキーから取り出すための記述があればそれを知りたいのです。

2011/04/06 13:29:17
id:la-la-land No.4

回答回数58ベストアンサー獲得回数6

ポイント10pt
function getVal(&$item, $key, $index)
{
    if ($key==$index) {
        echo($item);
    }
}

$obj = new DB_Table();
$obj->table = 'hana';

array_walk($obj->dbList(), 'getVal', 2);

これでどうでしょうか。

id:gelgelgel

ご回答ありがとうございます。

質問内容にありますように「記述方法」が知りたいのです。

関数を利用する方法出あれば私もわかります。

あくまでも$obj->dbList()[3];のような記述から出力したいのです。

2011/04/06 14:00:54
id:zero-uhura No.5

回答回数14ベストアンサー獲得回数3ここでベストアンサー

ポイント80pt

未検証ですが、どうかな?

class DB_Table {

 public function dbList($index = null){

  $array = array(1=>'ume', 2=>'sakura', 3=>'kiku');

  if($this->table == 'hana'){

   if ($index !== null) {

    if (array_key_exists($index, $array)) {

     return $array[$index];

    } else {

     return false; // 対象のインデックスない場合の処理

    }

   } else {

    return $array;

   }

  }

 }

}

... 省略 ...

echo $obj->dbList(2); // sakura が出力

id:gelgelgel

ご回答ありがとうございます

なるほど!!こういう設定の仕方もあるのですね。

知りたかった方法と違いますが、要件満たせました!!

ありがとうございました。

2011/04/06 16:17:10

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません