2012-06-22 9 views
22

Hola quiero preguntar si hay una manera de hacer esto sin foreach ($ array as $ k => $ v). Sé que funcionará, pero estoy buscando una forma más elegante si lo sabes. Así que mi arsenal era como:PHP: establezca todos los valores en una matriz en algo

1 = 231 
2 = 432 
3 = 324 

que me da la vuelta y se convirtió en: 231 => 1, 432 =>2, 324 => 3. Ahora lo que tengo que hacer es fijar todos los valores a '1'

+0

¿Desea dejar de usar foreach y para qué punto? ¿Evita la pérdida del índice actual en su matriz, o simplemente no tiene que escribir manualmente la estructura foreach completa? –

Respuesta

34

Usted puede utilizar 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: Necesito más café ... :-P –

+3

Siempre eche la culpa al café. : P +1 – Xethron

3

Creo que usted está buscando para esta función: array_fill()

Desde el enlace de arriba:

"llena una matriz con entradas num del valor del parámetro de valor, claves que comienzan en el parámetro start_index ".

Aunque si sus índices no son numéricos y/o no son enumerables (por ejemplo, 231 a 324 inclusive), entonces usted puede ser mejor con, como dice Rocket, array_fill_keys() o su foreach regular.

+1

Probablemente quiera 'array_fill_keys' en su lugar. –

+0

¡Tienes razón, te olvidaste de eso! ;) – Xunnamius

14

array_fill_keys() debe ser lo que necesita:

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

Cualquier método que se llama, como array_map o fill_keys todavía estaría utilizando un bucle para repetir la matriz Parece que usted quiere algo como array_map, que can be found here

Si se tiene en cuenta que para ser más elegante, a cada uno su propia :)

2

me dieron en este post con la misma pregunta, pero que terminó siendo otro enfoque.

¿Por qué usar array_flip + array_keys en lugar de simplemente usar array_values?

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

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

La primera respuesta es usar array_flip + array_keys. Mi respuesta usa array_values, no la misma respuesta. –

10

Para PHP> 5,3 puede utilizar funciones anónimas.

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

Nota: el valor se pasa por referencia.

1
array_replace(array_flip($columns), array_fill_keys($columns, 0)); 
Cuestiones relacionadas