2013-03-11 82 views
0

所以我想编写一个方法,将所有的数组与一个特定的键值,但我遇到的问题是,当我尝试和取消设置数组,以便没有重复的结果跳过在几件事情上,这让我感到困惑。所以关于如何改进这种方法的任何建议将不胜感激。另一个问题,我有..有办法来检查是否每个这些数组都有我正在寻找的所有4个键。如何系统地合并数组而不丢失数据?

“发布日期” => “电子表格和传单月” => “广告在每月更新” => “的目录功能” =>

所以我在做什么是合并阵列,在数据库中的相同的ID,所以我不必做一些非常讨厌的SQL查询,但我想知道是否有办法确保所有这些键中的4个将在每个结果中...如果有是与一个或多个相关的值..我的方法会将值添加到其键,如果没有与该键关联的值,它将只是一个空字符串。

protected function array_with_same_val($array, $key) { 

    for($i = 0; $i < count($array); $i++) { 
     for($j = 1; $j < count($array); $j++) { 
      if(isset($array[$j]) && isset($array[$i]) && $array[$i][$key]==$array[$j][$key]) { 
       $temp = array_merge($array[$i], $array[$j]); 
       $array[$i] = $temp; 
       //unset($array[$j]);  
      } 
     } 
    } 

    return $array; 
} 

这里是我的阵列的样品(会有很多更多的价值,这是只给一个想法):

'0' => array 
    (
     'Release Date' => 'September 1, 2013', 
     'cp_id' => '112960' 
    ), 

    '1' => array 
    (
     'Spreadsheet and Flyer Month' => 'September 1, 2013', 
     'cp_id' => '112960' 
    ), 

    '2' => array 
    (
     'Advertise in Monthly Update' => 'September 1, 2013', 
     'cp_id' => '112960' 
    ), 

    '3' => array 
    (
     'Release Date' => 'September 1, 2013', 
     'cp_id' => '109141' 
    ), 
    ); 

任何帮助,在此将不胜感激。

+0

是否只有一个数组?你能否提供你的阵列样本? – SomeSillyName 2013-03-11 18:56:50

+0

刚刚添加了一个示例 – 2013-03-11 19:03:08

+0

_“如果输入数组具有相同的字符串键,则该键的后面的值将覆盖前一个键,但是,如果数组包含数字键,则后面的值不会覆盖原始值,但会被追加。“_ – Wrikken 2013-03-11 19:04:28

回答

1

试试这个($输入你上面提供的阵列)...

$output = array(); 
$requiredKeys = array('Release Date' => '', 'Spreadsheet and Flyer Month' => '', 'Advertise in Monthly Update' => '', 'Feature in Catalog' => ''); 

foreach ($input as $item) { 
    if (array_key_exists($item['cp_id'], $output)) { 
     $output[$item['cp_id']] = array_merge($output[$item['cp_id']], $item); 
    } else { 
     $output[$item['cp_id']] = array_merge($requiredKeys, $item); 
    } 
} 

$output = array_values($output); 

的array_values底部打电话只是从数组中删除字符串键。

+0

你是我的英雄......非常感谢你!它的作品非常完美! – 2013-03-11 19:49:20