2011-05-27 12 views
19

¿Cuál es la manera más rápida de convertir una matriz simple en una matriz asociativa en PHP para que los valores se puedan verificar en el isset($array[$value])?¿Cómo convertir una matriz simple a una matriz asociativa?

I.e. manera más rápida de hacer la siguiente conversión:

$array = array(1, 2, 3, 4, 5); 
$assoc = array(); 

foreach ($array as $i => $value) { 
     $assoc[$value] = 1; 
} 
+1

uso in_array (valor $, $ array) en lugar de isset ($ array [valor $]) – TarranJones

Respuesta

14

array_flip() está haciendo exactamente eso:

array_flip() devuelve un array el fin del tirón, es decir, las teclas de trans se convierten en valores y los valores de trans convertirse en llaves.

Tenga en cuenta que los valores de trans necesidad de ser claves válidas, es decir, que tiene que ser integer o string. Se emitirá una advertencia si un valor tiene el tipo incorrecto, y el par de clave/valor en la pregunta no se invertirá.

Si un valor tiene varias ocurrencias, la última clave se usará como sus valores, y todas las demás se perderán.


Pero aparte de eso, sólo hay un tipo de matriz en PHP. Incluso las matrices numéricas ("simples", como las llamas) son asociativas.

+0

array_flip lo hará ... gracias .. pero isset (array [5 ]) no está establecido, pero en una matriz asociativa se establece isset (assoc_array [5]) ... porque el valor es la clave ... pero en la matriz simple, el índice de la matriz es la clave ... me falta algo – user773755

+0

@ Roma: Estás mezclando dos cosas aquí. Cada matriz es asociativa. Por supuesto '$ array [5]' no está configurado, porque las claves van de '0' a' 4'. Desea una matriz donde las claves van desde '1' a '5' (o en otras palabras, desea establecer los valores de la matriz en como las teclas de la otra). Pero aún así, ambas matrices son asociativas. Las teclas de '$ array' recién comienzan a partir de' 0' y enteros continuos. –

+0

nota: array_fill_keys es de alguna manera más rápido que array_flip con mis pruebas limitadas – user773755

26

Su código es el equivalente exacto de:

$assoc = array_fill_keys(array(1, 2, 3, 4, 5), 1); // or 
$assoc = array_fill_keys(range(1, 5), 1); 

array_flip(), si bien puede trabajar para su propósito, no es lo mismo.

PHP ref: array_fill_keys(), array_flip()

+1

Esta debería ser la respuesta aceptada. – vaerek

+0

¿Cómo puedo aplicar esto para una matriz bidimensional? ¡Gracias! –

+0

Tienes razón. La forma correcta es array_fill_keys(), Esta debería ser la respuesta seleccionada. –

Cuestiones relacionadas