如何将数组中的索引值作为键,奇数作为值

问题描述 投票:0回答:5

我在索引数组中有数据,其中偶数索引值是键,奇数是值,我试图使它们成为新数组中的键值,请参阅下面的代码并建议我。

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;
        }
    }
php arrays
5个回答
1
投票

这是一个解决方案,使用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 
)

Demo on 3v4l.org


2
投票

使用array_combinearray_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
)

当然,这只适用于具有偶数条目的数组。


0
投票

我不知道你究竟是什么意思,但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'] )

0
投票

尝试使用一个跳过整数的循环。

<?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);

0
投票

您可以使用简单的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)
© www.soinside.com 2019 - 2024. All rights reserved.