假设 PHP 中有以下数组:
array('red','blue','green','purple');
我想要最简单和快速的方法来使该数组如下所示:
array('red'=>'blue','green'=>'purple');
如果已经存在执行此操作的 php 函数,那就更好了。我正在运行 aphp 5.4
和5.5
两者,所以希望不会有问题。
假设 PHP 中有以下数组:
array('red','blue','green','purple');
我想要最简单和快速的方法来使该数组如下所示:
array('red'=>'blue','green'=>'purple');
如果已经存在执行此操作的 php 函数,那就更好了。我正在运行 aphp 5.4
和5.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
}
$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);
You can see it running on http://ideone.com/CTGXQZ
您可以轻松编写自己的函数来执行此操作:
$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";
$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)