如何在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_recrasive来解决这个问题。。等等。我已经广泛搜索了类似的问题,但我没有找到任何能满足我需求的东西。

我能够正确地将original_array中的第2个和第3个数组与array_component组合在一起。但是,我不知道如何将该结果与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_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()方法中找到。