我在索引数组中有数据,其中偶数索引值是键,奇数是值,我试图使它们成为新数组中的键值,请参阅下面的代码并建议我。
Array
(
[0] => firstName
[1] => bob
[2] => lastName
[3] => alex
)
码
$k = array();
$v = array();
foreach ($a as $key => $value) {
if ($key % 2 == 0) {
$k[] = $value;
}else{
$v[] = $value;
}
}
这是一个解决方案,使用array_intersect_key
选择奇数值,然后选择偶数值(使用range
生成键值列表),然后使用array_combine
从这些值集生成输出:
$a = [ 'firstname' , 'bob' , 'lastname' , 'alex' ];
$new = array_combine(
array_intersect_key($a, array_flip(range(0, count($a) - 1, 2))),
array_intersect_key($a, array_flip(range(1, count($a) - 1, 2)))
);
print_r($new);
输出:
Array (
[firstname] => bob
[lastname] => alex
)
使用array_combine
和array_filter
组合的替代解决方案:
$joined = array_combine(
array_filter($a, function($key) { return $key % 2 == 0; }, ARRAY_FILTER_USE_KEY),
array_filter($a, function($key) { return $key % 2 != 0; }, ARRAY_FILTER_USE_KEY)
);
$joined
将是:
Array
(
[firstName] => bob
[lastName] => alex
)
当然,这只适用于具有偶数条目的数组。
我不知道你究竟是什么意思,但Key => Value可以通过这样做来实现。
foreach ($a as $key => $value) {
if ($key % 2 == 0) {
$newArray[$value] = $a[$key+1];
}
}
print_r($newArray);
// possible output of above code in the example given array would be something like
Array ( ['firstName'=>'bob','lastName'=>'alex'] )
尝试使用一个跳过整数的循环。
<?php
$old = array(
'firstname',
'bob',
'lastName',
'alex'
);
$new = array();
for($i = 0; $i < count($old); $i += 2) {
$new[$old[$i]] = $old[$i + 1];
}
print_r($new);
您可以使用简单的for循环执行此操作
$contents = [ 'firstname' , 'bob' , 'lastname' , 'alex' ];
$a = [];
for( $i = 0; $i<= count( $contents ) - 1; $i++ ){
$a[ $contents[ $i ] ] = $contents[ $i + 1 ];
$i++; //add another to skip every second
}
var_dump( $a );
输出:
array (size=2)
'firstname' => string 'bob' (length=3)
'lastname' => string 'alex' (length=4)