从刚刚创建的数组中获取值

时间:2012-02-04 14:08:18

标签: php arrays

我有这个函数创建一个值数组:

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 $post;
}

当我这样调用这个函数时:

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

数组正确返回。

但是如果我尝试像这样搜索数组的特定值:

echo var_dump($post['author_id']);

它总是返回NULL。

我的代码有什么问题?

感谢您的帮助。

4 个答案:

答案 0 :(得分:3)

我相信如果你改变了

$post[] = array(

$post = array(

它应该解决问题。 您能否显示var_dump($post)的结果?

答案 1 :(得分:0)

函数中的赋值是错误的。您需要使用此代码(剥离[] parentesys)

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

或通过

访问您需要的索引
 $post[0]['author_id']

在这种情况下,您应该依靠var_dumpvar_export来调查数据结构的布局方式。我更喜欢第二个,因为输出类似于 获取数据所需的代码,更容易发现错误。

在手册中,您将看到var_dump返回void,如果您尝试回显其结果,则无法获得预期的结果

echo var_dump($post['author_id']);

去掉回声,输出就可以了(如果你需要输出一个字符串,可以使用var_export或ob_start)。

修改

在注释中,$ post变量是一个数组数组,上面的注释仍然有效,因为您需要访问包含它的数组索引的各种author_id索引。如果您需要在某个地方获得作者的所有ID,那么您可以使用数组映射:

$authors = array_map(function($x){return $x['author_id'];},$post);

如果你想在哪里获得别的东西,你应该更好地解释预期结果是什么。

答案 2 :(得分:0)

让我们变得非常有趣和轻松。

function getPostInfo($query, $fields, $type, $limit, $since, $until, $lang, $stopwords, $identifier) {
//your code
    }
}   
    return (object)$post;
}

然后当您访问返回的对象时,它只是

$post->author_id;

这只是为了好玩,但效果很好。将数组转换为标准对象。 :)

好吧,让我们变得严肃;)

在foreach语句( $ posts = array())之前初始化数组,然后将变量分配给数组键( $ post ['key'] = $ value )然后将每组数组键分配给数组( $ posts [] = $ post )。我希望这会有所帮助。

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);
 $posts = array(); //initialize array here
  foreach($j->data as $v) {
  if ($v->type == $type) {
        //create variables
        $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;
        //asign values to array keys
        $post['author_id']  = $author_id;
        $post['orginal_id'] = $original_id;
        $post['post_url']   = $post_url;
        $post['descritpion']= $description;
        $post['pub_date']   = $pub_date;
        //asign $post to the $posts array to create an array of $post(s)
        $posts[] = $post;

    }
}   
    return $posts;
}

我认为这可能有助于实现您的目标。

以下代码是使用的引用。它来自PHP手册中Array部分的示例。

<?php
// This:
$a = array( 'color' => 'red',
            'taste' => 'sweet',
            'shape' => 'round',
            'name'  => 'apple',
            4        // key will be 0
          );

$b = array('a', 'b', 'c');

// . . .is completely equivalent with this:
$a = array();
$a['color'] = 'red';
$a['taste'] = 'sweet';
$a['shape'] = 'round';
$a['name']  = 'apple';
$a[]        = 4;        // key will be 0

$b = array();
$b[] = 'a';
$b[] = 'b';
$b[] = 'c';

// After the above code is executed, $a will be the array
// array('color' => 'red', 'taste' => 'sweet', 'shape' => 'round', 
// 'name' => 'apple', 0 => 4), and $b will be the array 
// array(0 => 'a', 1 => 'b', 2 => 'c'), or simply array('a', 'b', 'c').
?> 

答案 3 :(得分:0)

就像Eineki所说,你正在尝试访问不存在的数组元素。如果你对$ post变量执行var_dump,如下所示:

var_dump($post);

您应该看到$ post数组实际上是一个从[0]开始的数字数组,每个项目都包含一个包含数据的子数组。

你创建的是一个二维数组,一个数组数组,$ j-&gt;数组中每个项目的一个数组。

您可以像这样迭代数组:

foreach ($post as $key => $value)
{
    var_dump($value);
    var_dump($value['author_id'];
}