自定义对平面关联数组的键进行排序

问题描述 投票:0回答:4

我有一个这样的数据数组:

$array = array(
'total_ids' => 0,
'unique_ips' => 0,
'unique_ids' => 0,
'global' => 0,
'total_ips' => 0,
);

我需要将其排序为:

$array = array(
'unique_ids' => 0,
'unique_ips' => 0,
'total_ids' => 0,
'total_ips' => 0,
'global' => 0
);

我相信这可以通过uksort完成,但我找不到custom_sort函数的解决方案。

php arrays sorting
4个回答
5
投票

这似乎毫无意义,你能提供一个你需要这个的理由吗?我认为这与循环输出有关。

$new_array = array(
  'unique_ids' => $array['unique_ids'],
  'unique_ips' => $array['unique_ips'],
  'total_ids' => $array['total_ids'],
  'total_ips' =>$array['total_ips'],
  'global' => $array['global']
);
$array = $new_array;

1
投票

看起来排序是按字符串长度排序,然后按字母顺序排序。使用 uksort 实现这一点并不难!

function cmp( $a, $b) 
{
    if( strlen( $a) != strlen( $b))
    {
        return strlen( $a) < strlen( $b) ? 1 : -1;
    }
    return strcasecmp( $a, $b);
}

uksort( $array, 'cmp');

输出:

// Before uksort()
array(5) {
  ["total_ids"]=>
  int(0)
  ["unique_ips"]=>
  int(0)
  ["unique_ids"]=>
  int(0)
  ["global"]=>
  int(0)
  ["total_ips"]=>
  int(0)
}
// After uksort()
array(5) {
  ["unique_ids"]=>
  int(0)
  ["unique_ips"]=>
  int(0)
  ["total_ids"]=>
  int(0)
  ["total_ips"]=>
  int(0)
  ["global"]=>
  int(0)
}

见证魔法


0
投票

我有一组这样的数组,但未排序。我将使用单个查询将值插入数据库,例如 INSERT INTO table (unique_ids,unique_ips,total_ids,total_ips,global) VALUES (...),(...),(...) 等。这就是为什么我需要对这个集合的数组进行相同的排序

那么为什么不做类似的事情

$array = array(
'total_ids' => 0,
'unique_ips' => 0,
'unique_ids' => 0,
'global' => 0,
'total_ips' => 0,
);


 'INSERT INTO table(' . implode(', ', array_keys($array)) . ') VALUES (' . implode(', ', $array) . ')'

快速输入,预计会出现一些语法错误。


0
投票

这将根据数组键对数组进行降序排序

您想对数组进行降序排序,因此可以使用此函数

krsort
,它将根据键降序对数组进行排序,我将它们放入名为有序数组的新数组中

<?php
$array = array(
    'total_ids' => 0,
    'unique_ips' => 0,
    'unique_ids' => 0,
    'global' => 0,
    'total_ips' => 0,
    );
    krsort($array);
    $sorted_array = array(); 
foreach ($array as $key => $value) {
    $sorted_array[$key] = $value; 
}
print_r($sorted_array); 
?> 
© www.soinside.com 2019 - 2024. All rights reserved.