2017-01-21 2 views
0

Я пытаюсь локализовать правильную подматрицу, чтобы изменить count, если определенное значение присутствует несколько раз.Изменить значение внутри массива на основе ввода в php

У меня есть следующий код:

$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 существует более чем один раз, я не хочу, чтобы создать еще один Продублируйте в массиве, но я хочу, чтобы изменить count к 2

Как найти правильный «суб» -array и измените значение count на 2, если хэштег присутствует в пределах $hashtags более одного раза?

Идея состоит в том, что я в конце могу сортировать эти массивы и получать наиболее распространенный хэштег, глядя на count.

ответ

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; 
} 
+0

Ах, вы избили меня до этой рекомендации. +1 для выбранного вами подхода: P – SpencerD

0

Считаете ли вы использование массива с ключом?

$trending = array(); 

foreach($hashtags as $hashtag) { 
    if(!isset($trending[$hashtag])){ 
     $trending[$hashtag] = 1; 
    }else{ 
     $trending[$hashtag] += 1; 
    } 
} 

Используя шпоночным массив, нет дублирования, и вы можете легко проверить, как часто хэштегом используется только доступ $trending[$hashtag]. Кроме того, вы можете получить список всех хэштегов в тренд-массиве, используя $allHashtags = array_keys($trending);.

Конечно, если ваши спецификации проекта не позволяют этого, то, во что бы то ни стало, используйте другой подход, но это будет подход, который я бы принял.

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;  
} 
Смежные вопросы