2011-03-19 14 views
38

Estoy usando la función range() para crear una matriz. Sin embargo, quiero que el keys sea el mismo que el value. Esto está bien cuando lo hago range(0, 10) como el índice comienza desde 0, sin embargo si lo hago range(1, 11), el índice aún se iniciará desde 0, por lo que termina 0=>1 cuando yo quiero que sea 1=>1PHP crear matriz donde la clave y el valor es el mismo

¿Cómo puedo usar range() a crear una matriz donde el key es el mismo que el value?

+0

Por qué no sólo no utiliza la clave en absoluto? –

+0

im usando una biblioteca que no puedo modificar que requiera esto>. < – Ozzy

+0

Posible duplicado de [¿Cómo creo una matriz para un rango de valores con claves usando php?] (Http://stackoverflow.com/questions/8227875/how -do-i-create-an-array-for-a-range-of-values-with-keys-using-php) –

Respuesta

120

¿Qué tal array_combine?

$b = array_combine(range(1,10), range(1,10)); 
+0

¿cómo el rango devuelve valores de matriz? Cuando hacemos eco del rango (1,10), ¿se muestra todo el contenido? tipo confuso? – Nandakumar

+0

Brillante respuesta –

+0

simple, claro y perfecto! –

1

No hay una solución inmediata para esto. Usted tendrá que crear la matriz a sí mismo, así:

$temp = array(); 
foreach(range(1, 11) as $n) { 
    $temp[$n] = $n; 
} 

Pero, más importante aún, ¿por qué ¿Necesita esto? ¿Puedes usar el valor en sí mismo?

0
<?php 
function createArray($start, $end){ 
    $arr = array(); 
    foreach(range($start, $end) as $number){ 
    $arr[$number] = $number; 
    } 
    return $arr; 
} 

print_r(createArray(1, 10)); 
?> 

Ver salida aquí: http://codepad.org/Z4lFSyMy

0
<?php 

$array = array(); 
foreach (range(1,11) as $r) 
    $array[$r] = $r; 

print_r($array); 

?> 
5

O se han hecho durante esta manera:

$b = array_slice(range(0,10), 1, NULL, TRUE); 

Encuentra la salida aquí: http://codepad.org/gx9QH7ES

+0

su código es inteligente –

0

Crear una función para hacer esta:

if (! function_exists('sequence_equal')) 
{ 
    function sequence_equal($low, $hight, $step = 1) 
    { 
     return array_combine($range = range($low, $hight, $step), $range); 
    } 
} 

Usando:

print_r(sequence_equal(1, 10, 2)); 

Salida:

array (
    1 => 1, 
    3 => 3, 
    5 => 5, 
    7 => 7, 
    9 => 9, 
) 

En PHP 5.5> = Puede utilizar Generador de hacer esto:

function sequence_equal($low, $hight, $step = 1) 
{ 
    for ($i = $low; $i < $hight; $i += $step) { 

     yield $i => $i; 
    } 
} 
Cuestiones relacionadas