0

私は次の配列を持っています。

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」値が一意である配列を保持したい。たとえば、上記の配列では、同じ「codePm」を共有する「PM-AAA」と「PM-BBB」とは対照的に、「codePm」は一意であるため、「PM-CCC」配列は保持されます。 s値。

1つの機能でそれを行うことは可能ですか?

4

3 に答える 3

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

于 2013-03-01T13:35:27.793 に答える
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
                )

        )

)
于 2013-03-01T13:36:06.117 に答える
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;)

于 2013-03-01T14:20:44.057 に答える