0

I have a PHP class that is meant to get a mysqli query, make a multidimensional array, and currently just echo the whole array. It is this code:

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 has the database connection information for the mysqli.

I am learning OOP, so I did this in procedural, and it works fine, with this code:

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

This prints the multidimensional array just like I want it to.
What am I doing wrong in the OOP code?

Thank you.

4

1 回答 1

3

你的代码:

print_r($class->multi_dim_array);

您忘记了(),因此您没有调用该方法。您正在访问(不存在的)属性。尝试这个:

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