我有一個簡單的數組,其中的關鍵是總是後跟值:創建只從另一個數組的值的關聯數組 - 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