我有这个函数创建一个值数组:
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。
我的代码有什么问题?
感谢您的帮助。
答案 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_dump或var_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'];
}