我想弄清楚如何重新组织一个数组.. 我有一个多维数组(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中的第一个数组值相结合。
提前感谢任何帮助!
答案 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。