多维数组 - 维护数据完整性

时间:2012-03-20 12:16:19

标签: php

我有当前的数组

array
   161 => 
     array
        'cat_id' => string '5' (length=1)
        'temp_id' => string '2' (length=1)
        'prod_id' => string '44' (length=2)
   162 => 
     array
        'cat_id' => string '3' (length=1)
        'temp_id' => string '2' (length=1)
        'prod_id' => string '44' (length=2)
   164 => 
     array
        'cat_id' => string '2' (length=1)
        'temp_id' => string '2' (lenth=1)
        'prod_id' => string '45' (length=2)

我正在使用此函数删除重复的数组值:

function removeDupes($array) {
    $temp = array();
    foreach ($array as $k => &$v) {
        if (in_array($v['prod_id'],$temp)) {
            unset($array[$k]);
        }
        $temp[] = $v['prod_id'];
    }
    return $array;
}

如果prod_id在前一个数组中是重复的,则会删除数组中的任何重复值。

我想维护产品的完整类别ID列表,此时,当我取消设置整个key =>值对时,这些列表会被删除。

有没有人有任何想法我能做到这一点?

根据评论编辑:

我正在寻找这样的结果:

array
    161 =>
        'cat_id' => array('5','3')
        'prod_id' => 44

所以我删除了重复产品ID的重复数组条目,但保留了类别ID。我希望有所帮助。

2 个答案:

答案 0 :(得分:1)

也许是这样的:

$input = array(); // define your array
$output = array(); // here will be output
$temp = array();
foreach($input as $key => $value)
{
    if (isset($temp[$value['prod_id']]))
    {
        $output[$temp[$value['prod_id']]]['cat_id'][] = $value['cat_id'];
    }
    else
    {
        $output[$key] = array(
            'cat_id' => array($value['cat_id']),
            'prod_id' => $value['prod_id']
        );
        $temp[$value['prod_id']] = $key;
    }
}

答案 1 :(得分:0)

我想到的第一件事就是遍历你的结构,构建一个array_index =>的帮助结构。首次出现的prod_id(对于该示例阵列(44 => 161,45 => 164))。除了第一个,你同时删除prod_id到第一个找到的。