2012-06-22 3 views
22

こんにちは、foreach($ array = $ vとして$ array)なしでこれを行う方法があるかどうか質問したいと思います。私はそれが動作することを知っているが、私はよりエレガントな方法を探しています。私はそれを反転し、それがなったPHP:配列のすべての値を何かに設定する

1 = 231 
2 = 432 
3 = 324 

231 => 1, 432 =>2, 324 => 3 は、だから私の配列のようでした。 array_fill()

上記のリンクから:今、私は何をする必要があるか、私はあなたがこの機能を探していると信じてい'1'

+0

あなたはforeachをどちらの側に使用したくないですか?配列内の現在のインデックスの損失を防止するか、foreach構造体全体を手動で入力する必要はありませんか? –

答えて

34

あなたはarray_fill_keysを使用することができます。

$array = array(
    1 => 231, 
    2 => 432, 
    3 => 324 
); 

$array = array_flip($array); 

$array = array_fill_keys(array_keys($array), 1); 
+3

array_kill_keys? ;-) – acme

+13

@acme:私はもっとコーヒーが必要です... :-P –

+3

コーヒーには常に責任があります。 :P +1 – Xethron

3

にすべての値を設定することです「

num個のエントリを持つ配列を塗りつぶしvalueパラメータの値のうち、start_indexパラメータから始まるキー。

あなたのインデックスが数値でないおよび/または(231から含めて324に、例えば)列挙されていない場合がロケットが言うように、あなたは、とほうであってもよいし、array_fill_keys()たり、定期的なforeachの。

+1

代わりに、おそらく 'array_fill_keys'が必要です。 –

+0

あなたは正しいです、それについて忘れてしまった! ;) – Xunnamius

14

array_fill_keys()はあなたが必要なものでなければなりません:

$keys = array_keys($yourArray); 
$filled = array_fill_keys($keys, 1); 
1

を呼び出す任意の方法を、このようにarray_mapやfill_keysとしてまだ反復処理するループを使用することだろう配列。あなたはそれがよりエレガントであることを考慮すればあなたは、このような can be found here

array_mapを、として何かをしたいと思うようにそれはそれぞれ自分自身に、そうです:)

2

私は同じ質問で、この記事では得たが、私はなってしまいましたもう1つaproach。

なぜ単にarray_valuesを使用する代わりに、array_flip + array_keysを使用するのですか?

$array = array(
    1 => 231, 
    2 => 432, 
    3 => 324 
); 

$array = array_fill_keys(array_values($array), 1); 
+0

最初の答えはarray_flip + array_keysです。私の答えは同じ答えではなく、array_valuesを使用しています。 –

10

PHPについて> 5.3あなたは無名関数を使用することができます。

array_walk($array,function(&$value){$value=1;});

注:値は、参照によって渡されます。

1
array_replace(array_flip($columns), array_fill_keys($columns, 0)); 
関連する問題