从多个值的数组创建对象

时间:2012-02-04 14:43:59

标签: php arrays facebook-graph-api

我有这个功能:

function getPostInfo($query, $fields, $type, $limit, $since, $until, $lang, $stopwords, $identifier) {
$url = file_get_contents('https://graph.facebook.com/search?q='.spaces($query).'&fields='.$fields.'&limit='.$limit.'&until='.$until);
 $j = json_decode($url);
  foreach($j->data as $v) {
  if ($v->type == $type) {
        $author_id = $v->from->id;
        $original_id = $v->id;
        $post_url = getPostUrl($original_id, $author_id);
        //$description = stopWords($v->message);
        $description = $v->message;
        $pub_date = $v->created_time;
        $post[]= array(
        'author_id' => $author_id, 
        'orginal_id' => $original_id, 
        'post_url' => $post_url, 
        'descritpion' => $description, 
        'pub_date' => $pub_date
        );
    }
 }  
 return (object)$post;
}

如果我打电话给例如:

$post = getPostInfo($query, $fields, $type, $limit, $since, $until, $lang, $stopwords, $identifier);

echo $post->pub_date;` 

它返回空..

我试图从函数中的$ post数组中去掉[] ...在这种情况下它只返回一个值..

相反它应该返回更多的值,因为对象应该从上面函数的foreach循环中获得更多的值。

但它没有发生..

我还尝试使用普通数组,没有像这样的对象:

$post = getPostInfo($query, $fields, $type, $limit, $since, $until, $lang, $stopwords, $identifier);

echo $post['pub_date'];

在这种情况下,它总是返回NULL ..

我做错了什么?

如何为数组分配更多值并在需要时将其取回,因为我知道我得到的东西应该包含更多值。它就像一个数组的数组......

我有点困惑..

我喜欢使用对象的解决方案,但如果还有其他方法,那就更好了。

这是我从数组$ post获得的一个例子:

array(5) { [0]=> array(5) { ["author_id"]=> string(10) "1319929690" ["orginal_id"]=> string(24) "1319929690_2736172406396" ["post_url"]=> string(77) "https://www.facebook.com/permalink.php?story_fbid=2736172406396&id=1319929690" ["descritpion"]=> string(773) "It was only a matter of time. # How do they serve alcoholic drinks on Italian cruise ships? - On the rocks # What vegetables do you get with dinner on Italian cruise ships? - Leeks # What's the fastest way to get off an Italian cruise ship? - Follow the captain # When the captain of the ill fated Costa Concordia was asked if he knew where he was going he replied "off course." # So the captain of the Costa Concordia will soon be in the dock. That's more than can be said for his ship. # The Costa Concordia is probably the most expensive thing to go down in Italy since Berlusconi's last hooker. # What's the difference between the Italian economy and the stricken cruise liner Costa Concordia? Nothing - The bottoms dropped out of both." ["pub_date"]=> string(24) "2012-02-04T14:36:54+0000" } [1]=> array(5) { ["author_id"]=> string(10) "1721122272" ["orginal_id"]=> string(24) "1721122272_1862454417365" ["post_url"]=> string(77) "https://www.facebook.com/permalink.php?story_fbid=1862454417365&id=1721122272" ["descritpion"]=> string(1968) "Thách thà ng nà o quánh tao 1. MỸ: “Tao muốn đánh thằng nà o, là  tao đánh thằng đó. Ngoà i ra, tao bao tiá»n súng!†2. NATO: “Mỹ đánh thằng nà o, tao đánh thằng đó!â€. 3. NGA: “Thằng nà o bật tao, tao cắt dầu lá»­a!â€. 4. ISRAEL: “thằng nà o ngấm ngầm muốn đánh tao, tao đánh thằng đó!â€. 5. NHẬT: “thằng nà o đánh tao, tao sẽ bảo Mỹ đánh thằng đó. Nếu chúng mà y không ngừng tấn công, tao cho Maria Ozawa nghỉ việc!â€. 6. TRUNG QUá»C: “Thằng nà o gần tao, tao đánh thằng đó!â€. 7. ÄÀI LOAN: “Thằng nà o đòi đánh tao, tao bảo báo chí chá»­i thằng đó!â€. 8. NAM HÀN: “Thằng nà o định đánh tao, tao tập trận vá»›i thằng Mỹ!â€. 9. BẮC HÀN: “Thằng nà o là m tao bá»±c, tao sẽ đánh thằng Nam Hà n!â€. 10. Berlusconi (ITALIA): “Thằng nà o oánh tao, tao… ngủ vá»›i vợ thằng đó!â€. 11. SINGAPORE : “Thằng nà o đánh tao?!Chắc đếk thằng nà o rảnh mà  Ä‘i đánh tao!â€. 12. IRAQ : “Thằng nà o đánh tao thì cứ đánh cho đã, chừng nà o mệt thì tá»± Ä‘á»™ng vá»!â€. 13. ARAP SAUDI : “Thằng nà o đánh tao, tao mua thằng đó!†14. Billaden: “Thằng nà o đánh tao, tao khủng bố thằng Mỹ!â€. 15. Liên Hiệp Quốc: “Tao dán cái mác… vùng cấm bay lên thằng nà o, chúng mà y úp sá»t thằng đấy cho tao!â€. 16. CUBA : “Thằng nà o oánh tao, tao cho Việt Nam má»™t mình canh giữ thế giá»›i!â€. 17. VIỆT NAM: “Chá»— nà o có oánh nhau, tao bà y tá» quan ngại sâu sắc. Còn thằng nà o oánh tao, tao tuyên bố chủ quyá»n, tao cắt Ä‘iện luân phiên, sau đó tao… cá»±c lá»±c lên án!â€. 18. THỤY SĨ : Thằng nà o đánh tao, Tao khóa tà i khoản tiá»n quốc gia thằng đó. 19. PHILIPIN : †Thằng nà o đánh tao, muốn hứng bão qua mà  đánh. =]]" ["pub_date"]=> string(24) "2012-02-04T13:50:47+0000" } [2]=> array(5) { ["author_id"]=> string(9) "594958865" ["orginal_id"]=> string(27) "594958865_10150583915793866" ["post_url"]=> string(80) "https://www.facebook.com/permalink.php?story_fbid=10150583915793866&id=594958865" ["descritpion"]=> string(717) "# How do they serve alcoholic drinks on Italian cruise ships? - On the rocks # What vegetables do you get with dinner on Italian cruise ships? - Leeks # What's the fastest way to get off an Italian cruise ship? - Follow the captain # When the captain of the ill fated Costa Concordia was asked if he knew where he was going he replied "off course." # So the captain of the Costa Concordia will soon be in the dock. That's more than can be said for his ship. # The Costa Concordia is probably the most expensive thing to go down in Italy since Berlusconi's last hooker. # What's the difference between the Italian economy and the stricken cruise liner Costa Concordia? Nothing - The bottoms dropped out of both." ["pub_date"]=> string(24) "2012-02-04T13:15:45+0000" } [3]=> array(5) { ["author_id"]=> string(10) "1561522855" ["orginal_id"]=> string(24) "1561522855_2516825610916" ["post_url"]=> string(77) "https://www.facebook.com/permalink.php?story_fbid=2516825610916&id=1561522855" ["descritpion"]=> string(410) "Monti "frainteso" sulla monotonia del posto fisso??? Come Berlusconi che smentiva le proprie dichiarazioni mezzora dopo averle fatte??? Ma fatemi il piacere!!! La cosa che più mi fa specie é assistere all'atteggiamento di tanti antiberlusconiani di maniera che ieri si stracciavano le vesti per ogni cazzata che proveniva da Arcore e che oggi sono pronti a digerire politiche ed esternazioni anche peggiori!!" ["pub_date"]=> string(24) "2012-02-04T12:46:50+0000" } [4]=> array(5) { ["author_id"]=> string(9) "749211731" ["orginal_id"]=> string(27) "749211731_10150528401901732" ["post_url"]=> string(80) "https://www.facebook.com/permalink.php?story_fbid=10150528401901732&id=749211731" ["descritpion"]=> string(265) "B. al Financial Times: "Mi farò da parte dalla politica attiva e non ho nessuna intenzione di candidarmi ancora a primo ministro". Bossi: "Se Berlusconi si ritira è risolto il problema". La solida alleanza parlamentare che ha governato l'Italia in questi 20 anni." ["pub_date"]=> string(24) "2012-02-04T11:57:05+0000" } } 

3 个答案:

答案 0 :(得分:0)

你需要像这样把它叫出来

echo $post[0]["author_id"];
echo $post[1]["author_id"];

如果您需要一次显示所有值,也可以为每个循环使用a

foreach($post as $p){
   echo $p["author_id"];
}

答案 1 :(得分:0)

我个人会坚持使用数组,所以请回复return $post;

您必须为不同的行回显$post[0]['pub_date'];$post[1]['pub_date'];$post[2]['pub_date'];

或者你可以循环

foreach ($post as $post_values){
    echo $post_values['pub_date'];
}

答案 2 :(得分:0)

尝试做这样的事情

    $post[] = (object) array(
            'author_id' => $author_id,
            'orginal_id' => $original_id,
            'post_url' => $post_url,
            'description' => $description,
            'pub_date' => $pub_date
    );