web-dev-qa-db-ja.com

PHPキーと値が同じ配列を作成

range()関数を使用して配列を作成しています。ただし、keysvalueと同じにしたい。インデックスが_0_から始まるので、これはrange(0, 10)を実行しても問題ありませんが、range(1, 11)を実行すると、インデックスは_0_から開始されるため、 _0=>1_にしたいときに_1=>1_になる

どのようにrange()を使用して、keyvalueと同じである配列を作成できますか?

43
Ozzy

array_combine はどうですか?

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

またはあなたはこのようにそれをしました:

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

ここで出力を見つけます: http://codepad.org/gx9QH7ES

7
Smolla

これには、すぐに使える解決策はありません。次のように、自分で配列を作成する必要があります。

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

しかし、より重要なのは、なぜこれが必要ですか?値そのものを使用できますか?

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));
?>

ここの出力を参照してください: http://codepad.org/Z4lFSyMy

0
Mike Lewis
<?php

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

print_r($array);

?>
0
RDL

これを作成する関数を作成します。

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

使用:

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

出力:

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

PHP 5.5> =では、ジェネレータを使用してこれを行うことができます:

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

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