根据键=>值对对数组进行排序

雷尼埃

我正在尝试根据排序数组,key=>value但无法完成此操作。这是我正在工作的代码:

$arr = [
    '183034' => 9,
    '183033' => 6,
    '183032' => 3,
    '183002' => null,
    '182973' => null,
    '182971' => null,
    '182969' => null,
    '182999' => null,
    '182997' => null,
    '182995' => null,
    '182962' => null,
    '182948' => null
];

$arrTemp = [];

foreach($arr as $key => $value) {
    $arrTemp[$key] = $value;
}

array_multisort($arrTemp, SORT_NUMERIC, $arr);

var_export($arrTemp);

输出为:

#php test.php
array (
  0 => NULL,
  1 => NULL,
  2 => NULL,
  3 => NULL,
  4 => NULL,
  5 => NULL,
  6 => NULL,
  7 => NULL,
  8 => NULL,
  9 => 3,
  10 => 6,
  11 => 9,
)

但是我希望这样的事情:

array (
    '183002' => null,
    '182973' => null,
    '182971' => null,
    '183032' => 3,
    '182969' => null,
    '182999' => null,
    '183033' => 6,
    '182997' => null,
    '182995' => null,
    '183034' => 9,
    '182962' => null,
    '182948' => null    
);

其中,值定义了应继续移动项目的位置。换句话说,让我们用一个例子来举例说明:'183032' => 3该项目在结果数组上保持位置3,因此我应该做的是保持相同的数组顺序,但是将该项目移到输出数组上您可能会注意到的位置3。对于'183033' => 6这个位置6的位置也是如此,因此我对整个数组重新排序以将其移动到位置6,依此类推。有什么可以帮我的吗?

更新

如果我将原件更改$arr为该怎么办

$arr = [
    '183034' => ['sort_position' => 9],
    '183033' => ['sort_position' => 5],
    '183032' => ['sort_position' => 3],
    '183002' => [],
    '182973' => [],
    '182971' => [],
    '182969' => [],
    '182999' => [],
    '182997' => [],
    '182995' => [],
    '182962' => [],
    '182948' => []
];

几乎相同,但这就是数组的外观(仅作为示例),具有的数组[]应该在内部具有其他键,我只是在这里不写它们,因为相关的是sort_position

史蒂夫
$arr = [
    '183034' => ['sort_position' => 9],
    '183033' => ['sort_position' => 5],
    '183032' => ['sort_position' => 3],
    '183002' => [],
    '182973' => [],
    '182971' => [],
    '182969' => [],
    '182999' => [],
    '182997' => [],
    '182995' => [],
    '182962' => [],
    '182948' => []
];
$count = count($arr);
$tmp=[];
//sort by key descending
krsort($arr);
foreach($arr as $key=>$val){
    //if element has a sort position
    if(isset($val['sort_position'])){
        //save it in tmp, indexed by sort position
        $tmp[$val['sort_position']]=$val;
        //and remove it from original array
        unset($arr[$key]);
    }
}
//Note $arr now only contains elements without sort position

$out=[];
//build new array of same length as original
for($i=0; $i < $count; $i++){
    //if there is an element in temp with this sort position, use it
    //else grab the next one from the non sort position elements
    $out[] = isset($tmp[$i])? $tmp[$i] : array_shift($arr);
}

var_dump($out);

编辑只是意识到我错过了数组键的重要性。也许您实际上根本不需要密钥,但是为了完整起见,这里有一个修改后的解决方案,它也保留了密钥:

$count = count($arr);
$has_sortorder=[];
$no_sortorder=[];
krsort($arr);
foreach($arr as $key=>$val){
    if(isset($val['sort_position'])){
        $has_sortorder[$val['sort_position']]=[$key, $val];
    }else{
        $no_sortorder[]=[$key, $val];
    }
}


$out=[];
for($i=0; $i < $count; $i++){
    if(isset($has_sortorder[$i])){
        $out[$has_sortorder[$i][0]] = $has_sortorder[$i][1];
    }else{
        $element = array_shift($no_sortorder);
        $out[$element[0]] = $element[1];
    }
}

var_dump($out);

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

PHP根据值对数组进行排序

来自分类Dev

PHP根据值对数组进行排序

来自分类Dev

根据值对数组进行排序

来自分类Dev

JavaScript 根据值对对象数组进行排序(条件排序)

来自分类Dev

如何根据对象的值对对象数组进行分组排序?

来自分类Dev

如何首先根据键对数组进行排序?

来自分类Dev

对数组进行排序并根据某些值进行排列

来自分类Dev

PHP - 根据索引=> 子数组的值对数组进行排序

来自分类Dev

根据Lua中的键对数组值进行分组?

来自分类Dev

按特定键的值对数组中的字典进行排序

来自分类Dev

对数组的重复值进行排序并使其成为键

来自分类Dev

根据包含时间戳的对象值对数组进行排序

来自分类Dev

根据嵌套对象值对数组进行排序

来自分类Dev

根据php中的值对数组进行排序

来自分类Dev

根据值的升序或降序对数组进行排序

来自分类Dev

根据值中的数字对数组进行排序

来自分类Dev

根据包含时间戳的对象值对数组进行排序

来自分类Dev

根据日期对对象数组进行排序

来自分类Dev

根据日期对对象数组进行排序

来自分类Dev

根据另一个键数组对对象数组进行排序

来自分类Dev

根据属性值对对象进行排序

来自分类Dev

根据对象中的键长度/计数对对象数组进行排序

来自分类Dev

根据数组中某个属性的值对对象数组进行排序

来自分类Dev

根据子数组值对PHP多维数组进行排序,然后对主数组键进行排序

来自分类Dev

根据与数组匹配的键对哈希进行排序

来自分类Dev

按不同键中的特定值对对象数组进行排序

来自分类Dev

如何根据另一个数组的值对数组的值进行排序

来自分类Dev

根据特定元素对数组进行排序

来自分类Dev

如何根据TimeWise对数组进行排序?

Related 相关文章

  1. 1

    PHP根据值对数组进行排序

  2. 2

    PHP根据值对数组进行排序

  3. 3

    根据值对数组进行排序

  4. 4

    JavaScript 根据值对对象数组进行排序(条件排序)

  5. 5

    如何根据对象的值对对象数组进行分组排序?

  6. 6

    如何首先根据键对数组进行排序?

  7. 7

    对数组进行排序并根据某些值进行排列

  8. 8

    PHP - 根据索引=> 子数组的值对数组进行排序

  9. 9

    根据Lua中的键对数组值进行分组?

  10. 10

    按特定键的值对数组中的字典进行排序

  11. 11

    对数组的重复值进行排序并使其成为键

  12. 12

    根据包含时间戳的对象值对数组进行排序

  13. 13

    根据嵌套对象值对数组进行排序

  14. 14

    根据php中的值对数组进行排序

  15. 15

    根据值的升序或降序对数组进行排序

  16. 16

    根据值中的数字对数组进行排序

  17. 17

    根据包含时间戳的对象值对数组进行排序

  18. 18

    根据日期对对象数组进行排序

  19. 19

    根据日期对对象数组进行排序

  20. 20

    根据另一个键数组对对象数组进行排序

  21. 21

    根据属性值对对象进行排序

  22. 22

    根据对象中的键长度/计数对对象数组进行排序

  23. 23

    根据数组中某个属性的值对对象数组进行排序

  24. 24

    根据子数组值对PHP多维数组进行排序,然后对主数组键进行排序

  25. 25

    根据与数组匹配的键对哈希进行排序

  26. 26

    按不同键中的特定值对对象数组进行排序

  27. 27

    如何根据另一个数组的值对数组的值进行排序

  28. 28

    根据特定元素对数组进行排序

  29. 29

    如何根据TimeWise对数组进行排序?

热门标签

归档