0

mysqli クエリを取得し、多次元配列を作成し、現在は配列全体をエコーするだけの PHP クラスがあります。それはこのコードです:

include("connect.php");

class database
{
    public $motto;
    public $motto_array = array();
    public $rating;
    public $rating_array = array();
    public $category;
    public $score;
    private $mysqli;
    public $counter_array = array();
    public $multi_dim_values = array();
    public $multi_dim_category = array();


    function setMysqli($mysqli)
    {
        $this->mysqli = $mysqli;
    }

    function setCategory($category)
    {
        $this->category = $category;
    }

    function query_category()
    {
        if ($stmt = $this->mysqli->prepare("SELECT motto, score FROM mottos WHERE category=? ORDER BY score DESC"))
        {
            $stmt->bind_param("s", $this->category);
            $stmt->execute();
            $stmt->bind_result($motto, $ranking);
            while ( $stmt->fetch() ) {
                $this->motto_array[] = $motto;
                $this->rating_array[] = $ranking;
            }
            $stmt->close();
        }
    }

    function multi_dim_array()
    {
        $multi_dim_values = array($this->motto_array, $this->rating_array);
        $counter_array = range(0,count($this->motto_array)-1);
        foreach($counter_array as $index => $key) {
            $foreach_array = array();
            foreach($multi_dim_values as $value) {
                $foreach_array[] = $value[$index];
            }
            $multi_dim_category[$key]  = $foreach_array;
        }
        return $multi_dim_category;
    }


}

$class = new database;
$class->SetMysqli($mysqli);
$class->SetCategory("person");
$class->query_category();
print_r($class->multi_dim_array);
print_r($class->multi_dim_category);

connect.php には、mysqli のデータベース接続情報があります。

私は OOP を学んでいるので、手続き型でこれを行いましたが、次のコードで問題なく動作します。

include("connect.php");

    function category($mysqli, $cat)
    {
        if ($stmt = $mysqli->prepare("SELECT motto, score FROM mottos WHERE category=? ORDER BY score DESC"))
        {

        $stmt->bind_param("s", $cat);

        $stmt->execute();

        while($stmt->fetch())
        {
            printf ("[%s (%s) in %s] \n", $motto, $ranking, $category);
            $array .= compact("motto", "category", "ranking");
        }
        print_r($array);*/

        $a = array();
        $b = array();
        $c = array();
        $stmt->bind_result($motto, $ranking);
        while ( $stmt->fetch() ) {
            $a[] = $motto;
            $b[] = $ranking;
        }
        $result = array();
        $values = array($a, $b);
        $c = range(0,count($a)-1);

        foreach($c as $index => $key) {
            $t = array();
            foreach($values as $value) {
                $t[] = $value[$index];
            }
            $result[$key]  = $t;
        }

        return $result;

        $stmt->close();

        }
    }
    $cat = "person";
    $array_one = category($mysqli, $cat);
    print_r($array_one);

これは、私が望むように多次元配列を出力します。
OOPコードで何が間違っていますか?

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

4

1 に答える 1

3

あなたのコード:

print_r($class->multi_dim_array);

を忘れた()ので、メソッドを呼び出していません。(存在しない) プロパティにアクセスしています。これを試して:

print_r($class->multi_dim_array());
于 2013-10-30T02:01:17.470 に答える