PHP - 带数组的foreach函数

时间:2014-01-18 21:11:29

标签: php arrays function foreach while-loop

我在调用函数时遇到错误。

  

“警告:C:\ xampp \ htdocs \ blog \ posts.php中的非法字符串偏移'id'   在28号线上   2"

功能:

function get_short_posts() {
    $sql = "SELECT * FROM posts ORDER by id DESC LIMIT 0, 5";
    $result = mysql_query($sql);
    while($row = mysql_fetch_assoc($result)) {
        $timestamp = new DateTime($row['date']);
        return array (
            "id" => $row['id'],
            "title" => $row['title'],
            "content" => $row['content'],
            "author" => $row['author'],
            "date" => $timestamp->format('d-m-Y'),
            "time" => $timestamp->format('H:i')
        );
    }

呼叫:

require_once "functions.php";
    $_posts = get_short_posts();
    foreach($_posts as $_post) {
        echo $_post['id'];
    }

3 个答案:

答案 0 :(得分:1)

你知道你在get_short_posts函数右边第一次迭代后返回,所以foreach将无法按预期工作。

尝试:

<?php 
function get_short_posts() {
    $sql = "SELECT * FROM posts ORDER by id DESC LIMIT 0, 5";
    $result = mysql_query($sql);
    $return = array();
    while($row = mysql_fetch_assoc($result)) {
        $timestamp = new DateTime($row['date']);
        $return[] = array (
            "id" => $row['id'],
            "title" => $row['title'],
            "content" => $row['content'],
            "author" => $row['author'],
            "date" => $timestamp->format('d-m-Y'),
            "time" => $timestamp->format('H:i')
        );
    }
    return $return;
}
?>

<?php 
require_once "functions.php";

foreach(get_short_posts() as $_post) {
    echo $_post['id'];
}
?>

此外,Don't use mysql_* functions in new code。它们不再被维护and are officially deprecated。请参阅red box?转而了解prepared statements,并使用PDOMySQLi - this article将帮助您确定哪个。如果您选择PDO here is a good tutorial

答案 1 :(得分:0)

function get_short_posts() {
    $sql = "SELECT * FROM posts ORDER by id DESC LIMIT 0, 5";
    $result = mysql_query($sql);
    while($row = mysql_fetch_assoc($result)) {
        $timestamp = new DateTime($row['date']);
        $data [] = array (
            "id" => $row['id'],
            "title" => $row['title'],
            "content" => $row['content'],
            "author" => $row['author'],
            "date" => $timestamp->format('d-m-Y'),
            "time" => $timestamp->format('H:i')
        );

    }
    return $data;
    }

你返回数据,所以循环停止,将数据保存在数组中并返回该数组,如abive code

答案 2 :(得分:0)

您的代码错误,应该如下所示,假设查询返回的数据如上所述。

function get_short_posts() {
    $sql = "SELECT * FROM posts ORDER by id DESC LIMIT 0, 5";
    $result = mysql_query($sql);
    $rows = array();
    $return_data = array();
    while($row = mysql_fetch_assoc($result)) {
        $timestamp = new DateTime($row['date']);
        $data = array (
            "id" => $row['id'],
            "title" => $row['title'],
            "content" => $row['content'],
            "author" => $row['author'],
            "date" => $timestamp->format('d-m-Y'),
            "time" => $timestamp->format('H:i')
        );
        $return_data[] = $data;
    }
    return $return_data ;

}


require_once "functions.php";
    $posts = get_short_posts();
    foreach($posts as $key=>$val) {
        echo $val['id'];
    }