2010-11-24 6 views
5

私はこれを単一の機能で実行したいと考えています。キー=>値のペアを配列に追加または削除するにはどうすればいいですか?

私は、キー=>値のペアを持っている:

14=>1 

私はそのような多くのペアを含む配列を持っている:

array(15=>2, 16=>7, 4=>9) 

私は、キー=>値のペアを追加する機能が欲しいです既に存在していない場合は配列を返しますが、配列がすでに存在する場合は配列から配列を削除します。

私はこれのための単一の機能を持ちたいと思います。

+0

キーが存在するが、値が異なる場合、結果である必要がありますか? – Toto

+0

@ M42キー=>値のペアを追加します。キーと値の両方が挿入しようとしているものと同じである場合にのみ削除します。 –

答えて

6
function updateArray($array, $findKey, $findValue) { 

    foreach($array as $key => $value) { 

     if ($key == $findKey AND $value == $findValue) { 
      unset($array[$key]); 
      return $array; 
     } 
    } 

    $array[$findKey] = $findValue; 
    return $array; 

} 
1

私に聞こえる音です。

function yourSpecialFunctionRenameMe(&$array, $key, $value){ 
    if(array_key_exists($array, $key) && $array[$key] == $value){ 
     $array[$key] = $value; 
    }else{ 
     unset($array[$key]); 
    } 
} 
+0

これは、関数内の '$ array'を修正し、終了時にそれを割り当て解除します。' $ array'を戻すことはできません。 – alex

+0

ファンクションシグニチャに追加された参照渡し記号 '&'に気づくでしょうか? – mauris

+0

Oh whoops do not: – alex

0
function arr_add_rem($arr, $k, $v){ 
    if(!array_key_exists($k)){ 
     $arr[$k] = $v; 
    } 
    else{ 
     unset($arr[$k]); 
    } 

    return $arr; 
} 

このような何か?

+0

$ arrは参照で渡す必要があります – jab

+0

@jabそれはなぜでしょうか?配列の変更されたコピーを返すことは問題ありません。 – alex

+0

@alexうーん...申し訳ありません...あなたが正しいです、私はリターンを見ませんでした – jab

1
function add_or_remove(&$array, $key, $value) { 

    // remove key/value pairs if they're both identical 
    if (array_key_exists($key, $array) 
     && $array[$key] == $value) { 
     unset($array[$key]); 

    // add new key/value pair 
    // OR modify the value for existing key 
    } else { 
     $array[$key] = $value; 
    } 
} 
0
function add_or_remove_key_value_pair(&$array, $key, $value){ 
    if ($key == array_search($value, $array)) 
     unset($array[$key]); 
    else 
     $array[$key] = $value; 
} 

テスト:

$array = array(15=>2, 16=>7, 4=>9); 
add_or_remove_key_value_pair($array, 15, 2);// 15=>2 will be removed 
add_or_remove_key_value_pair($array, 14, 1);// 14=>1 will be added 
var_dump($array); 

出力:

array(3) { 
    [16]=> int(7) 
    [4]=> int(9) 
    [14]=> int(1) 
} 
関連する問題