根据php中的输入更改数组中的值

时间:2017-01-21 20:24:39

标签: php arrays

我正在尝试定位正确的子数组,以便在特定值出现多次时更改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来获取最常见的主题标签。

4 个答案:

答案 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;    
}