如何在PHP中重新组织数组?

时间:2016-03-30 00:01:56

标签: php arrays

我想弄清楚如何重新组织一个数组.. 我有一个多维数组(Ill调用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中的第一个数组值相结合。

提前感谢任何帮助!

4 个答案:

答案 0 :(得分:3)

嗯,脏的方法就是使用像protected boolean isAppForeground(String packageName) { UsageStatsManager usageStatsManager = (UsageStatsManager)getSystemService(Context.USAGE_STATS_SERVICE); long time = System.currentTimeMillis(); List<UsageStats> stats = usageStatsManager.queryUsageStats(UsageStatsManager.INTERVAL_DAILY, time - 1000 * 10, time); String topPackageName = new String(); if(stats != null) { SortedMap<Long,UsageStats> mySortedMap = new TreeMap<>(); for (UsageStats usageStats : stats) { mySortedMap.put(usageStats.getLastTimeUsed(),usageStats); } if(mySortedMap != null && !mySortedMap.isEmpty()) { topPackageName = mySortedMap.get(mySortedMap.lastKey()).getPackageName(); } } return topPackageName.equals(packageName); } 这样的组合数组函数和输入:

array_combine

答案 1 :(得分:2)

可能会有一些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

答案 2 :(得分:2)

这应该适合你:

首先,您可以将主数组的键放入一个带array_shift()的单独变量中,这将只删除数组中的第一个元素,即保存键的数组。

然后使用array_map()遍历两个subArrays并使用reward作为键,cost值作为值,并将其返回到数组中。最后,您只需使用新创建的数组array_combine() $keys键。{/ p>

代码:

<?php

    $keys = array_shift($arr);

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


    print_r($result);

?>

答案 3 :(得分:-1)

您可能想看看Yii 2.0 Framework中的BaseArrayHelper

尽管此文件是框架的一部分,但它只有非常少的依赖项,您应该能够在代码中仅使用此文件或其中的一部分进行少量修改。

您可以在index() method

中找到您的用例示例