您好我需要为写了一篇以上帖子的用户检查一个数组。我想通过user-> url做到这一点,因为这个是每个用户都有一个唯一的ID。
我的数组看起来像:
{
"meta":{
"network":"all",
"query_type":"realtime"
},
"posts":[
{
"network":"facebook",
"posted":"2014-08-16 08:31:31 +00000",
"sentiment":"neutral",
"url":"someURL",
"user":{
"name":"Terance Podolski",
"url":"someURL1",
"image":"someURL"
}
},
{
"network":"facebook",
"posted":"2014-08-16 08:30:44 +00000",
"sentiment":"neutral",
"url":"someURL",
"user":{
"name":"Łukasz Podolski",
"url":"someURL2",
"image":"someURL"
}
},
{
"network":"facebook",
"posted":"2014-08-16 08:25:39 +00000",
"sentiment":"neutral",
"url":"someURL",
"user":{
"name":"Terance Podolski",
"url":"someURL1",
"image":"someURL"
}
}
]
}
首先我对阵列进行了两次排序,我只有正面和中性情绪的帖子,然后是我只有facebook发帖的网络。代码看起来像这样:
$sentimentPosNeu = array();
$sentimentPosNeuFacebook = array();
foreach ( $myarray -> posts as $post ) {
if($post -> sentiment == 'positive' || $post -> sentiment == 'neutral')
$sentimentPosNeu[] = $post;
}
foreach($sentimentPosNeu as $post) {
if($post -> network == 'facebook')
$sentimentPosNeuFacebook[] = $post;
}
现在我需要所有发布多次的用户。
我试过但不行:
$unique = array_unique($sentimentPosNeuFacebook);
$dupes = array_diff_key( $sentimentPosNeuFacebook, $unique );
答案 0 :(得分:0)
有几种方法可以做到这一点,但最明显的可能是简单地添加另一个循环结构,可以按用户url对帖子进行分组。例如:
$groupedPosts = array();
foreach ($sentimentPosNeuFacebook as $post) {
$userUrl = $post->user->url;
if (!isset($groupedPosts[$userUrl]))
$groupedPosts[$userUrl] = array($post);
else
$groupedPosts[$userUrl][] = $post;
}
这将使用用户的URL作为分组键对数组进行分组。然后,如果您想查找每个用户的帖子数量,您可以执行以下操作:
$counts = array_map(function($elem) {
return count($elem);
}, $groupedPosts);
如果您只想计算每个用户的帖子数量,那么@girlwithglasses绝对是更好的选择。但是,如果你需要做一些更复杂的事情,希望这会让你有所作为!
答案 1 :(得分:0)
如果您只想计算每个用户在Facebook上的正面和中立帖子的数量,您可以这样做:
foreach ( $myarray -> posts as $post ) {
if (($post -> sentiment == 'positive' || $post -> sentiment == 'neutral')
&& $post->network == 'facebook')
$poster[$post->user->url]++;
}
如果您想自己保留帖子,而不是每次都增加一个计数,您可以让$poster[$post->user->url]
成为包含该用户每个帖子的数组 - 即将$poster[$post->user->url]++
替换为{ {1}}在上面的代码中,使用$poster[$post->user->url][] = $post
来获取帖子数量。