0

そのため、家族と名前を含む 2 つの連想配列があります。各配列のインデックス キーは同じですが、値は異なります。2 つの配列を結合し、重複するキーではなく重複する値を削除してから、アルファベット順に並べ替える必要があります。

これまでのところ、

Array1 = array(
    "Grandma"=>"Laurie", 
    "Grandpa"=>"John",
     "Uncle"=>"Jeff", 
     "Aunt"=>"Julie", 
     "Cousin1"=>"Julie",
     "Cousin2"=>"Anna");
$Array2 = array(
    "Grandma"=>"Shannon", 
    "Grandpa"=>"Phillip",
     "Uncle"=>"Mike", 
     "Aunt"=>"Laurie", 
     "Cousin1"=>"Anna",
     "Cousin2"=>"Jeff",
     "Cousin3"=>"Kate"); 
//Combine the arrays
$array = array_merge_recursive($Mother_side, $Father_side);

ここまでは順調ですが、次のことを試します。

    $Distinct_names = array_unique($array); 

エラーが表示されます 注意: 配列から文字列への変換。何か案は?ありがとう。

4

2 に答える 2

1

array_unique()多次元配列では実行できません。array_unique()は、各値を文字列に変換して比較しますが、配列を文字列に変換することはできません。期待される結果は得られません。

私はあなたがあなたが望んでいたよりももう少し賢くなければならないと思います。あなたが私に5分を与えれば私は何かを思い付くことができるかもしれません。:P

これにより、必要な出力(アルファベット順の一意の名前の配列)が得られますが、非常に迅速で汚い解決策です。

$names = array();
foreach ($Array1 as $name) $names[] = $name;
foreach ($Array2 as $name) $names[] = $name;
$names = array_unique($names);
asort($names);
print_r($names);

出力:

Array
(
    [0] => Laurie
    [1] => John
    [2] => Jeff
    [3] => Julie
    [5] => Anna
    [6] => Shannon
    [7] => Phillip
    [8] => Mike
    [12] => Kate
)
于 2012-11-16T20:52:59.977 に答える
1

試す:

 $array1 = array(
"Grandma"=>"Laurie", 
"Grandpa"=>"John",
 "Uncle"=>"Jeff", 
 "Aunt"=>"Julie", 
 "Cousin1"=>"Julie",
 "Cousin2"=>"Anna");

$array2 = array(
"Grandma"=>"Shannon", 
"Grandpa"=>"Phillip",
 "Uncle"=>"Mike", 
 "Aunt"=>"Laurie", 
 "Cousin1"=>"Anna",
 "Cousin2"=>"Jeff",
 "Cousin3"=>"Kate"); 

 //Combine the arrays
 $array = array_merge_recursive($array1, $array2);

 function multi_arr_unique($array)
{
$distinct = array_map("unserialize", array_unique(array_map("serialize", $array)));

foreach ($distinct as $k => $v)
{
 if ( is_array($v) )
 {
  $distinct[$k] = multi_arr_unique($v);
 }
}

return $distinct;
}

 multi_arr_unique($distinct);
于 2012-11-16T20:56:46.640 に答える