组合数组中的匹配键

时间:2019-05-06 14:50:47

标签: php arrays multidimensional-array

已编辑 我现在得到组合的item_id,但是没有单个item_id。

我有一个带有三个键的数组。

$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" 
} 

我想结合使用具有相同关键字/网址的选项。

只需检查关键字是否匹配。

最终格式必须是jquery自动完成功能可以接受的格式,在这里我可以将文本分配给keyword,将值分配给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的数组列中?我看到的是一个字符串,但我需要作为一个数组。

这将在PHP末尾获取JSON编码,并由jquery自动完成功能读取。

1 个答案:

答案 0 :(得分:1)

感谢您指出字符串/数组问题。
如果存在匹配项,我就更改了如何添加至第三个键,如果没有匹配项,则解决方案是将array_push更改为just array。

$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'])
       ]);

   }    
}