我有一个简单的数组,其中的关键是总是后跟值:创建只从另一个数组的值的关联数组 - PHP
Array (
[0] => x
[1] => foo
[2] => y
[3] => bar
)
,我想转换到关联之一:
Array (
[x] => foo
[y] => bar
)
什么是最简单和最优雅的方式来做到这一点?
我有一个简单的数组,其中的关键是总是后跟值:创建只从另一个数组的值的关联数组 - PHP
Array (
[0] => x
[1] => foo
[2] => y
[3] => bar
)
,我想转换到关联之一:
Array (
[x] => foo
[y] => bar
)
什么是最简单和最优雅的方式来做到这一点?
为了存储效率,并减少计算。
如果$ input数组的值为奇数个,则最后一个值为NULL。
$result = array();
while (count($input)) {
$result[array_shift($input)] = array_shift($input);
}
我会用一个简单的启动关闭循环
$arr = array(
'x',
'foo',
'y',
'bar'
);
$result = array();
$end = count($arr);
for ($i = 0; $i+1 < $end; $i+=2) {
$result[$arr[$i]] = $arr[$i+1];
}
var_dump($result);
输出:
array(2) {
["x"]=> string(3) "foo"
["y"]=> string(3) "bar"
}
我不知道如何有效的,这是,但是:
$newArray = array();
foreach(array_chunk($array, 2) as $keyVal){
list($key, $val) = $keyVal;
$newArray[$key] = $val;
}
假设你想要的键/值对要在每一个/其他的模式,你可以使用:
$data = array('x', 'foo', 'y', 'bar', 'z');
$new = array();
$end = count($data);
for ($i = 0; $i < $end; $i += 2) {
$new[$data[$i]] = (isset($data[$i + 1]) ? $data[$i + 1] : '');
}
print_r($new);
会给:
Array
(
[x] => foo
[y] => bar
[z] =>
)
这将通过您的数据的列表迭代和设置第一个值作为键,下一个作为值。如果没有“下一个”值(即 - 原始数组中不能被2整除的最后一项),则为空。
这种方法的缺陷是,如果同一个“钥匙”被看到不止一次,它将被覆盖。这可以通过添加if (isset($new[$data[$i]])) continue;
作为循环的第一行来绕开。
如何:
$data = array('x','foo','y','bar');
$i = 0;
$n = count($data)
$newData = array();
while($i < $n) {
$newData[$data[$i]] = $data[++$i];
}
$ar = Array("x","foo","y","bar");
$assoc = Array();
for($i=0;$i<count($ar);$i+=2){$assoc[$ar[$i]]=$ar[$i+1];}
print_r($assoc);
输出:阵列([X] => FOO [Y] =>巴)
接受这个答案,因为它似乎最“优雅”,虽然所有的答案是真的有帮助!非常感谢! – errata