我有一个数组数组:
Array (
[0] => Array (
[a] = 1,
[b] = 'ABC',
[c] = 'ABC',
[1] => Array (
[a] = 2,
[b] = 'DEF',
[c] = 'DEF',
[2] => Array (
[a] = 3,
[b] = 'JKL',
[c] = 'JKL',
我怎么能让我的阵列变成这样:
Array (
[0] => Array (
[b] = 'ABC',
[a] = 1,
[c] = 'ABC',
[1] => Array (
[b] = 'DEF',
[a] = 2,
[c] = 'DEF',
[2] => Array (
[b] = 'JKL',
[a] = 3,
[c] = 'JKL',
我可以用字符串值“b”然后“a”然后“c”对它进行排序吗?
答案 0 :(得分:0)
当然可以,你只需要为它编写自己的比较函数,并将其与uksort结合起来。在你的情况下,你可以使用这样的函数($input
是你的输入数组,$output
结果是ldo):
$output = array_map(uksort($input, function ($a, $b) {
if ($a === 'b') return -1;
if ($a === 'c') return 1;
if ($b === 'b') return 1;
return -1;
}
您可能想要重写该功能,但array_map
和uksort
的组合应该可以帮助您入门。或者不要;)因为键是唯一的,所以四个if实际上就是诀窍。
答案 1 :(得分:0)
您的任务可以改写为“如何将元素移动到子数组的第一个位置?”
这可以在不进行任何迭代函数调用或比较的情况下实现。
只需迭代每个子数组,生成一个包含要移到最前面的列的单元素数组,然后使用并运算符(boolean isFinished = false
Thread {
this.repository = Repository.getInstance();
ClientLocation.LocationResult locationResult = new
ClientLocation.LocationResult() {
@Override
public void gotLocation(Location location) {
userLatitude = Double.toString(location.getLatitude());
userLongitude = Double.toString(location.getLongitude());
isFinished = true
}
};
while(true){
if(isFinished ) break:
}
ClientLocation clientLocation = new ClientLocation()
clientLocation.getLocation(getApplication().getApplicationContext(), locationResult);
deals = repository.getDeals(searchQuery, maxDistInKm,
userLatitude, userLongitude);
Thread.currentThread().interrupt()
}
)向其添加完整的子数组。这将用其原始值悄悄覆盖+
,但将其放置在所有其他元素之前。
代码:(Demo)
b
输出:
$array = [
['a' => 1, 'b' => 'ABC', 'c' => 'ABC'],
['a' => 2, 'b' => 'DEF', 'c' => 'DEF'],
['a' => 3, 'b' => 'JKL', 'c' => 'JKL']
];
var_export(
array_map(function($subarray) {
return ['b' => $subarray['b']] + $subarray;
}, $array)
);
这种结果可以通过多种方式产生-这只是其中一种。
通常在显示关联数据时不需要此技术,但是我们看不到如何使用数据。
如果这些数据来自数据库,则最合理的技术是使用SQL排序。
我的代码片段中的相同技术可用于将多个列带到子数组的前面;只需在并运算符之前指定生成子数组中的顺序即可。
如果您希望将所有列移动到其他位置,或者子数组中有数字键,请不要使用并运算符;以所需的顺序返回完整的子数组(换句话说,就像我对array (
0 =>
array (
'b' => 'ABC',
'a' => 1,
'c' => 'ABC',
),
1 =>
array (
'b' => 'DEF',
'a' => 2,
'c' => 'DEF',
),
2 =>
array (
'b' => 'JKL',
'a' => 3,
'c' => 'JKL',
),
)
所做的那样,使用变量完全重写子数组。