簡體   English   中英

僅從另一個數組的值創建關聯數組 - PHP

[英]Create an associative array from another array's values only - 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);
}

我不知道這有多有效,但是:

$newArray = array();
foreach(array_chunk($array, 2) as $keyVal){
    list($key, $val) = $keyVal;
    $newArray[$key] = $val;
}

演示: http : //codepad.org/VF8qHAhQ

$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] => bar )

我將從一個簡單的 for 循環開始

$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"
}

假設您希望鍵/值對處於every/other 模式中,您可以使用:

$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;來規避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];
}

@Rocket 代碼片段的現代等價物是在foreach()循環中使用數組foreach()

我的代碼段不使用“計數器”變量或進行任何迭代函數調用。

這將非常有效,因為只有 1 個函數調用才能生成所需的結果。

代碼:(演示

$array = ['x', 'foo', 'y', 'bar', 'z', 'zed'];

$result = [];
foreach (array_chunk($array, 2) as [$k, $v]) {
    $result[$k] = $v;
}
var_export($result);

輸出:

array (
  'x' => 'foo',
  'y' => 'bar',
  'z' => 'zed',
)

所以鍵的值按以下順序排列,當我們為一個值放置一個鍵時,我們不需要那個索引。我假設給定數組的鍵總是整數並且從 0 開始。

$array = ['x', 'foo', 'y', 'bar', 'z', 'zed'];
var_dump( $array);
$new = [];
foreach ($array as $key => $value) {
      if( ($key % 2) === 1 )
         $new[ $array [ $key-1 ] ] = $value;
      
}

 var_dump( $new ); 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM