如何在这个数组中保留这个元素?

时间:2013-03-01 13:23:33

标签: php arrays multidimensional-array

我有以下数组。

array(
[PM-AAA] => Array
    (
        [codePm] => PM-32249
        [codeArt] => Array
            (
                [0] => 32249
            )

        [codeArtInFlux] => Array
            (
                [0] => 123456
            )

    )

[PM-BBB] => Array
    (
        [codePm] => PM-32249
        [codeArt] => Array
            (
                [0] => 33270 
            )

        [codeArtInFlux] => Array
            (
                [0] => 484946
            )

    )

[PM-CCC] => Array
    (
        [codePm] => PM-82242
        [codeArt] => Array
            (
                [0] => 82242
                [1] => 82245
                [2] => 82246
            )

        [codeArtInFlux] => Array
            (
                [0] => 5191
                [1] => 51949
                [2] => 26486
            )

    )
)

我希望将数组保存在“codePm”值唯一的位置。例如,在上面的数组中,“PM-CCC”数组将保持不变,因为“codePm”是唯一的,与“PM-AAA”和“PM-BBB”相反,它们共享相同的“codePm”的价值。

有可能用一个功能吗?

3 个答案:

答案 0 :(得分:0)

据我所知,没有任何功能可以直接执行,您可以尝试:

function insert_unique_key($key_name,$elem,&$array) {
    //Get all elements with the key
    $values=array()
    foreach ($array as $ii) {
        $values[]=$ii[$key_name];
    }

    //Check if the value exists
    if (in_array($elem[$key_name], $values)===FALSE) {
        $array[]=$elem;
    }   
}

在您的代码中:

insert_unique_key('codePm',$elem_to_insert,$array_of_elements);

你必须为数组的每个元素做一个新的数组

-

编辑:抱歉,这是为了在数组中插入新的唯一值,而不是为了获取唯一值。

查看评论,我认为您希望唯一值尝试此功能:

function get_uniques_by_subkey($key_name,$array) {
    //Get all elements with the key
    $values=array();
    foreach ($array as $ii) {
        $values[]=$ii[$key_name];
    }

    //Get the elements that only appeared one time
    $count=array_count_values($values);
    unset($values);$values=array();
    foreach ($count as $key => $n) {
        if ($n==1)
            $values[]=$key;
    }

    //Get the values
    $out=array();
    foreach ($array as $key => $value) {
        if (in_array($value[$key_name],$values))
            $out[$key]=$value;
    }

    return $out;
}

您可以在此处查看结果:http://codepad.org/QmuoYxsk

答案 1 :(得分:0)

这样的东西?

 <?

    function removeDuplicatesByKey($a, $k) {
    $r = array();
    $tmp = array();
    foreach ($a as $ind => $arr) {
        $elem_found = array_search($arr[$k], $tmp);

        if ($elem_found === false) {
            $tmp[] = $arr[$k];
            $r[$ind] = $arr;
        } else {
            // ok, element found, need to remove both .. 
            foreach ($r as $index => $r_arr) {
                if ($r_arr[$k] ==  $arr[$k]) {
                    unset($r[$index]);
                }
            }
        }
     }

    return $r;
}
$full_arr = array(
'PM-AAA' => array
    (
        'codePm' => 'PM-32249',
        'codeArt' => array(
                '0' => 32249
            ),
        'codeArtInFlux' => array(
                '0' => 123456
            )
 )
,
'PM-BBB' => array
    (
        'codePm' => 'PM-32249',
        'codeArt' => array
            (
                '0' => 33270 
            ),

        'codeArtInFlux' => array
            (
                '0' => 484946
            )

    )
,
'PM-CCC' => array
    (
        'codePm' => 'PM-82242',
        'codeArt' => array
            (
                '0' => 82242,
                '1' => 82245,
                '2' => 82246
            ),

        'codeArtInFlux' => array
            (
                '0' => 5191,
                '1' => 51949,
                '2' => 26486
            )

    )
);


print_r(removeDuplicatesByKey($full_arr, 'codePm'));

?>

<强>输出

Array
(
    [1] => Array
        (
            [codePm] => PM-82242
            [codeArt] => Array
                (
                    [0] => 82242
                    [1] => 82245
                    [2] => 82246
                )

            [codeArtInFlux] => Array
                (
                    [0] => 5191
                    [1] => 51949
                    [2] => 26486
                )

        )

)

答案 2 :(得分:0)

我在工作中以速度模式制作了......你可以改进它;)

    $array = array( 

        'PM-AAA' => array(
        'codePm' => 'PM-32249',
        'codeArt' => array(32249),
        'codeArtInFlux' => array(123456)

    ),

        'PM-BBB' => array(
        'codePm' => 'PM-32249',
        'codeArt' => array(33270 ),
        'codeArtInFlux' => array(484946)
         ),

        'PM-CCC' => array(
        'codePm' => 'PM-82242',
        'codeArt' => array(82242,82245,82246),
        'codeArtInFlux' => array(5191,51949,26486)

    )
);



$code_count = array(); 
$arr2 = array();
foreach($array as $counter) {  

        $key = $counter['codePm']; 
        $code_count[] = $key;

}
$arr2 = (array_count_values($code_count));
print_r($arr2); //now i know how many times my code is repeated

while ($code_name = current($arr2)) {
    if ($code_name == 1) {
        $unique_code = key($arr2);
    }
    next($arr2);
}

echo $unique_code."</br>"; //i have my unique code

foreach ($array as $key) {
  var_dump($key);
  if($key['codePm']==$unique_code)
  $arr_aux = $key;  
}

echo "I have mi array ready with the unique val ;) </br>";

var_dump($arr_aux);

Saludos;)