0

PHP で次の配列を想定します。

array('red','blue','green','purple');      

その配列を次のように作成するための最も簡単で高速な方法が必要です。

array('red'=>'blue','green'=>'purple');      

これを行うphp関数がすでに存在する場合、それはさらに良いでしょう。私は両方を実行しているphp 5.4ので5.5、うまくいけば問題はないはずです。

4

5 に答える 5

2

必ずしも最速のアプローチであるとは限りませんが、これまで知らなかった PHP のいくつかの機能を知ることができるかもしれません。

$isEven = function ($value) {
    return !($value & 1);
};

$isOdd = function ($value) {
    return $value & 1;
};

function keyfilter($values, $function) {
    return array_intersect_key(
        $values,
        array_filter(
            array_keys($values),
            $function
        )
    );
}

$colourArray = array('red','blue','green','purple');

$mi = new MultipleIterator(
    MultipleIterator::MIT_NEED_ANY | 
    MultipleIterator::MIT_KEYS_ASSOC
);
$mi->attachIterator(
    new ArrayIterator(
        keyfilter(
            $colourArray, $isEven
        )
    ),
    'key'
);
$mi->attachIterator(
    new ArrayIterator(
        keyfilter(
            $colourArray, $isOdd
        )
    ),
    'value'
);

$newColourArray = array();
foreach($mi as $details) {
    $newColourArray[$details['key']] = $details['value'];
}

var_dump($newColourArray);
于 2013-10-09T22:16:09.413 に答える
1

最初に頭に浮かぶのは、次のようなものです。

$array = array('red', 'blue', 'green', 'purple');

function array_pair($source)
{
    $output = array();
    do {
        list($key, $value) = array_splice($source, 0, 2);
        $output[$key] = $value;
    } while (!empty($source));

    return $output;
}

var_dump(array_pair($array));

必要に応じて配列を出力します。

array(2) {
  ["red"]=>
  string(4) "blue"
  ["green"]=>
  string(6) "purple"
}

ソース配列に奇数の要素がある場合でも機能します。

$array = array('red', 'blue', 'green', 'purple', 'odd');
var_dump(array_pair($array));

結果:

array(3) {
  ["red"]=>
  string(4) "blue"
  ["green"]=>
  string(6) "purple"
  ["odd"]=>
  NULL
}
于 2013-10-09T22:16:24.260 に答える
0
$arr = array('red','blue','green','purple');   
$result = array();

for($i = 0; $i < count($arr); $i++) {
    if($i % 2 == 0) {
         $result[$arr[$i]] = $arr[$i + 1];
    }
}

出力:

array (size=2)
  'red' => string 'blue' (length=4)
  'green' => string 'purple' (length=6)
于 2013-10-09T22:17:57.797 に答える