我正在尝试定位正确的子数组,以便在特定值出现多次时更改count
。
我有以下代码:
$trending = [];
foreach($hashtags as $hashtag) {
if(in_array($hashtag->hashtag, $hashtags))
{
array_search()
}
else {
array_push($trending, [
'hashtag' => $hashtag->hashtag,
'counts' => '1'
]);
}
}
这给了我以下示例outout:
array(3) {
[0]=> array(2)
{
["hashtag"]=> "foobar"
["counts"]=> "1"
}
[1]=> array(2)
{
["hashtag"]=> "hashtags"
["counts"]=> "1"
}
[2]=> array(2)
{
["hashtag"]=> "imageattached"
["counts"]=> "1"
}
}
因此,在foreach
循环和if statement
中,我想检查主题标签的数据,例如如果主题标签foobar
存在多次,我不想在数组中创建另一个dublicate,但我想将count
更改为2
如果{{1}中存在主题标签,如何找到正确的" sub" -array,并将此count
更改为2
不止一次??
我的想法是,我最后可以对这些数组进行排序,并通过查看$hashtags
来获取最常见的主题标签。
答案 0 :(得分:2)
如果更改输出结构,可以执行以下操作:
$trending = [];
foreach($hashtags as $tag) {
if (isset($trending[$tag])) $trending[$tag]++;
else $trending[$tag] = 1;
}
哪会导致$trending
具有结构
array(2) {
["foobar"] => 1,
["hashtags"] => 2
}
然后可以使用
循环foreach($trending as $tag => $count) {
echo $tag . ' appears ' . $count . ' times.' . PHP_EOL;
}
答案 1 :(得分:0)
PHP方法 array_count_values 可能会有所帮助。 http://php.net/manual/en/function.array-count-values.php
答案 2 :(得分:0)
您是否考虑使用键控阵列?
$trending = array();
foreach($hashtags as $hashtag) {
if(!isset($trending[$hashtag])){
$trending[$hashtag] = 1;
}else{
$trending[$hashtag] += 1;
}
}
通过使用键控数组,没有重复,只需访问$trending[$hashtag]
即可轻松检查主题标签的使用频率。此外,您可以使用$allHashtags = array_keys($trending);
获取趋势数组中所有主题标签的列表。
当然,如果您的项目规范不允许这样做,那么请务必采用不同的方法,但这将是我采取的方法。
答案 3 :(得分:0)
你可以更改线性地改变你的阵列结构,但对于当前这应该可以工作。
$trending = [];
$checker = true;
foreach($hashtags as $hashtag) {
foreach ($trending as $key =>$value) {
if($value["hashtag"] == $hashtag->hashtag){
$trending[$key]["counts"]++;
$checker = false;
}
}
if($checker) {
array_push($trending, [
'hashtag' => $hashtag->hashtag,
'counts' => '1'
]);
}
$checker = true;
}