0

假设 PHP 中有以下数组:

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

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

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

如果已经存在执行此操作的 php 函数,那就更好了。我正在运行 aphp 5.45.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
$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

于 2013-10-09T22:20:25.483 回答
0

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

$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";
于 2013-10-09T22:17:37.490 回答
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 回答