Объединение совпавших ключей в массиве - PullRequest
1 голос
/ 06 мая 2019

Отредактировано Теперь я получаю комбинированные item_ids, но не единичные item_ids.

У меня есть массив с тремя ключами.

$searchArray = { 
[0]=> array(3) {
      ["keyword"]=> string(7) "history" 
      ["url"]=> string(7) "history" 
      ["item_id"]=> string(2) "16" 
}  
[1]=> array(3) {
      ["keyword"]=> string(4) "past"
      ["url"]=> string(4) "past" 
      ["item_id"]=> string(2) "16" 
}
[89]=> array(3) {
     ["keyword"]=> string(10) "biomedical" 
     ["url"]=> string(10) "biomedical" 
     ["item_id"]=> string(2) "34" 
} 
[93]=> array(3) { 
     ["keyword"]=> string(10) "biomedical" 
     ["url"]=> string(10) "biomedical" 
     ["item_id"]=> string(2) "35" 
} 

Я хочу объединить параметры, которые имеют одно и то же ключевое слово / URL.

Просто нужно проверить, соответствует ли ключевое слово,

Окончательный формат должен быть таким, который может принять автозаполнение jquery, где я могу назначить текст ключевому слову и значение url, id - item_id.

До этого в массиве было только два ключа, и я хотел бы комбинировать совпадения следующим образом.

  foreach ($searchArray as $row)
  {  
       $combineMatches[ $row['keyword'] ][] = $row['item_id'];        
  }

результат после использования json_encode():

"anthropologist":["27","37"],  
"biomedical":["34","35"],  
"m.s.":["18","19","23"]  

Что яв настоящее время есть:

$combineMatches = array();    
foreach ($searchArray as $row)
{         
     $match = 
 array_search($row['keyword'],array_column($combineMatches,'keyword'));
     if($match){
        $combineMatches[$match]['item_id']+= $row['item_id'];
     }else{
        array_push($combineMatches, [
           'keyword' => $row['keyword'],
           'url' => $row['url'],
          'item_id' => array_push($row['item_id'])
       ]);      
     }    
 }

Результат:

[7]=> array(3)
{    
    ["keyword"]=> string(8) "theology"   
    ["url"]=> string(8) "theology"   
    ["item_id"]=> NULL   
}   
[13]=> array(3) 
{  
    ["keyword"]=> string(7) "writing"   
    ["url"]=> string(7) "writing"   
    ["item_id"]=> NULL   
}  

Как добавить в столбец массива просто item_id?То, что я вижу, является строкой, но мне нужно, как массив.

Это кодирует JSON в конце PHP и читает с помощью автозаполнения jquery.

1 Ответ

1 голос
/ 06 мая 2019

Спасибо, что указали на проблему со строкой / массивом.
Я изменил способ добавления к третьему ключу, если есть совпадение, и если нет совпадения, решение меняло array_push на массив.

$combineMatches = array();
foreach ($searchArray as $row)
{
   $match=array_search($row['keyword'],array_column($combineMatches,'keyword'));
   if($match){
      $combineMatches[$match]['item_id'][] = $row['item_id'];
   }else{

        array_push($combineMatches, [
           'keyword' => $row['keyword'],
           'url' => $row['url'],
          'item_id' => array($row['item_id'])
       ]);

   }    
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...