压缩关联 php 数组



假设在PHP中出现以下数组:

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

我想要最简单和快速的方法来使该数组如下所示:

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

如果已经存在一个 php 函数可以做到这一点,那就更好了。我正在运行一个php 5.45.5两者,所以希望应该没有问题。

不一定是最快的方法,但也许它会向一些人介绍一些他们以前不知道的 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);

我想到的第一件事是这样的:

$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
}

您可以轻松编写自己的函数来执行此操作:

$src = array('red','blue','green','purple');
function glue($arr) {
  while(count($arr) > 0) {
    $dst[array_shift($arr)] = array_shift($arr);
  }
  return $dst;
}
foreach(glue($src) as $key => $value)
print $key ." => ".$value . "n";
$originalArray   = array('red','blue','green','purple');
$compressedArray = array();
$count = 0;
while($count < count($originalArray))
   $compressedArray[$originalArray[$count++]] = 
       $count < count($originalArray) ? $originalArray[$count++] : null;
print_r($compressedArray);

您可以看到它在 http://ideone.com/CTGXQZ 上运行

$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)

最新更新