如何打印从Php函数返回的所有数组元素?

时间:2012-12-30 17:49:32

标签: php sql arrays return echo

我有一个函数可以根据sql查询将一些行提取到一个数组中。 该数组是从函数返回的,如何遍历返回数组的所有元素? 我是Php的初学者。

function get_user_wants($user_id)
{
$query=mysql_query("select product_id from user_wishlist where user_id= $user_id");
return mysql_fetch_assoc($query);
}

$out=get_user_wants($user_id);
print_r($out);

它只打印第一个元素或第一个记录!

4 个答案:

答案 0 :(得分:4)

尝试这样的事情:

$sql = "select product_id from user_wishlist where user_id= $user_id";
$res = mysql_query($sql) or die("FAIL: $sql BECAUSE: " . mysql_error());;
while ($row = mysql_fetch_assoc($res))
{
    print_r($row);
}

如果你还没有注意到它,有人会激怒你使用MySQL而不是像MySQLI或PDO这样的东西。不要让他们打扰你。这里的要点是您的查询可能返回许多行,并且您需要某种迭代器来检索所有行,以便您的脚本可以处理它们。

在本例中,每个$ row数组中都会有一个product_id元素。一旦看到print_r()函数的输出,您可能会明白如何更改代码。这可能会成为你想要的(我想)。

function get_user_wants($user_id)
{
    $sql = "select product_id from user_wishlist where user_id= $user_id";
    $res = mysql_query($sql) or die("FAIL: $sql BECAUSE: " . mysql_error());;
    while ($row = mysql_fetch_assoc($res))
    {
        $out[] = $row['product_id'];
    }
    return $out;
}

答案 1 :(得分:2)

您将一次调用的结果返回mysql_fetch_assoc(),因此您只能获得第一行。

循环遍历它们以创建多维数组,然后返回:

function get_user_wants($user_id)
{
    $query=mysql_query("select product_id from user_wishlist where user_id= $user_id");
    $rows = array();
    while($row = mysql_fetch_assoc($query))
    {
         $rows[] = $row;
    }
    return $rows;
}

现在您可以使用foreach

循环它们
$list = get_user_wants(99);
foreach($list as $product)
{
    print_r($product);
}

附注:不建议使用mysql_*库,建议升级到MySQLi或PDO。

答案 2 :(得分:2)

你做不到。该函数仅返回第一个结果。而且没有更多的信息。

所以你需要返回不同的东西,例如结果资源:

function get_user_wants($user_id)
{
    $query = mysql_query("select product_id from user_wishlist where user_id= $user_id");

    return $query;
}

然后你可以迭代它:

$result = get_user_wants($user_id);

while ($out = mysql_fetch_assoc($result))
{
    print_r($out):
}

更好的方法是将结果包装在迭代器中:

function get_user_wants($user_id)
{
    $query = mysql_query("select product_id from user_wishlist where user_id= $user_id");

    return new MySqlResult($query);
}

$result = get_user_wants($user_id);

foreach ($result as $out)
{
    print_r($out):
}

这样的结果迭代器看起来像:

/**
 * MySql Result Set - Array Based
 */
class MySqlResult implements Iterator, Countable
{
    private $result;
    private $index = 0;
    private $current;

    public function __construct($result)
    {
        $this->result = $result;
    }

    public function fetch($result_type = MYSQL_BOTH)
    {
        $this->current = mysql_fetch_array($this->result, $result_type);
        return $this->current;
    }

    /**
     * Return the current element
     * @link http://php.net/manual/en/iterator.current.php
     * @return array
     */
    public function current()
    {
        return $this->current;
    }

    public function next()
    {
        $this->current && $this->fetch();
    }

    /**
     * Return the key of the current element
     * @link http://php.net/manual/en/iterator.key.php
     * @return mixed scalar on success, or null on failure.
     */
    public function key()
    {
        return $this->current ? $this->index : null;
    }

    /**
     * Checks if current position is valid
     * @link http://php.net/manual/en/iterator.valid.php
     * @return boolean The return value will be casted to boolean and then evaluated.
     * Returns true on success or false on failure.
     */
    public function valid()
    {
        return (bool)$this->current;
    }

    /**
     * Rewind the Iterator to the first element
     * @link http://php.net/manual/en/iterator.rewind.php
     * @return void Any returned value is ignored.
     */
    public function rewind()
    {
        $this->fetch();
    }

    /**
     * Count of rows.
     *
     * @link http://php.net/manual/en/countable.count.php
     * @return int The count of rows as an integer.
     */
    public function count()
    {
        return mysql_num_rows($this->result);
    }
}

答案 3 :(得分:1)

尝试

foreach ($out as $key=>$value) 
  echo "$key: $value<br>";

作为起点。