簡體   English   中英

如何在PHP中重組數組?

[英]How do I reorganize an array in PHP?

我試圖弄清楚如何重組數組。.我有一個多維數組(我稱它為original_array),我想獲取original_array中的第一個數組,並將值設置為新數組中的鍵。 我還想將original_array中第二個數組的值作為鍵,然后將original_array中第三個數組的值設置為這些鍵的值。

這是original_array的示例:

Array ( 
       [id] => Array ( 
                      [0] => 1 
                      [1] => 3 
                     ) 
   [reward] => Array ( 
                      [0] => Movie
                      [1] => Trip
                     ) 
     [cost] => Array ( 
                      [0] => 50 
                      [1] => 200
                     ) 
      )

基本上我想做的是這樣的:

Array ( 
       [1] => Array ( 
                     [Movie] => 50
                    )
       [3] => Array (
                     [Trip] => 200
                    )
      )

有沒有簡單優雅的方法可以像這樣合並這些內容? 我花了數小時試圖使用array_merge,array_merge_recursive ..等來解決這個問題。到目前為止,我一直在尋找類似的問題,但是我還沒有找到任何可以做的事情。

我能夠正確地將original_array中的第二和第三數組與array_combine組合在一起。 但是,我不知道如何將結果與original_array中的第一個數組的值結合在一起。

在此先感謝您的幫助!

好吧,骯臟的方法是僅將array_combine之類的組合數組函數與輸入配合使用:

$new_array = array_combine(
    $array['id'], // parent keys
    // combine chunked combined sub keys :p
    array_chunk(array_combine($array['reward'], $array['cost']), 1, true)
);

可能會有一些array_*()合並函數,它們可能會產生您想要的結果,但是僅迭代原始數組的[id]子數組並使用其值來創建新的子數組要容易得多鍵在另一個輸出數組中。

// To hold your output
$output = array();

// Iterate the original array's [id] sub-array
foreach ($original['id'] as $idxkey => $newkey) {
  // Add a sub-array using $newkey to the output array
  $output[$newkey] = array( 
    // Using the index (not value), retrieve the corresponding reward
    // value to use as the new array key
    // and corresponding cost to use as the new subarray value
    $original['reward'][$idxkey] => $original['cost'][$idxkey]
  );
}

這是一個演示: https : //3v4l.org/2pac3

這應該為您工作:

首先,您可以使用array_shift()將主數組的鍵放入一個單獨的變量中,該變量array_shift()從數組中刪除第一個元素,即持有鍵的數組。

然后使用array_map()遍歷兩個子數組,並使用reward作為鍵,將cost值作為值並將其返回到數組中。 最后,您只需要將array_combine()的鍵$keys與新創建的數組一起使用即可。

碼:

<?php

    $keys = array_shift($arr);

    $result = array_combine($keys, array_map(function($k, $v){
        return [$k => $v];
    }, $arr["reward"], $arr["cost"]));


    print_r($result);

?>

您可能想看看Yii 2.0 Framework的BaseArrayHelper

盡管此文件是框架的一部分,但只有很少的依賴項,您只需進行少量修改就可以在代碼中僅使用此文件或其一部分。

您的用例示例可以在index()方法中找到

暫無
暫無

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

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