web-dev-qa-db-fra.com

PHP créer un tableau où clé et valeur sont identiques

J'utilise la fonction range() pour créer un tableau. Cependant, je veux que la keys soit identique à la value. C'est ok quand je fais range(0, 10) car l'index commence à partir de 0, cependant si je fais range(1, 11), l'index commencera toujours à partir de 0, donc il finira par 0=>1 quand je veux qu'il soit 1=>1

Comment utiliser range() pour créer un tableau où key est identique à value?

42
Ozzy

Que diriez-vous de array_combine?

$b = array_combine(range(1,10), range(1,10));
127
Mason

Ou vous l'avez fait de cette façon:

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

Trouvez le résultat ici: http://codepad.org/gx9QH7ES

6
Smolla

Il n'y a pas de solution prête à l'emploi pour cela. Vous devrez créer le tableau vous-même, comme ceci:

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

Mais plus important encore, pourquoi en avez-vous besoin? Vous pouvez simplement utiliser la valeur elle-même?

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

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

Voir la sortie ici: http://codepad.org/Z4lFSyMy

0
Mike Lewis
<?php

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

print_r($array);

?>
0
RDL

Créez une fonction pour faire ceci:

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

En utilisant:

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

Sortie:

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

Dans PHP 5.5> =, vous pouvez utiliser Generator pour créer ceci:

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

        yield $i => $i;
    }
}
0
Wallace Maxters