【问题标题】:Sort a multidimensional an array with numeric keys but keep the keys same just change the order使用数字键对多维数组进行排序,但保持键相同,只需更改顺序
【发布时间】:2019-04-27 05:41:16
【问题描述】:

所以我有 3 维数组。我希望该数组根据键重新排序,但键的值应保持原样。例如,如果数组键是 5,2,4,1,3,那么它应该变成 1,2,3,4,5。下面我提供了我拥有的数组和例外数组以及我尝试过的解决方案。

这是我拥有的数组:-

[5] => Array
        (
            [Anfield] => Array
                (
                    [0] => Array
                        (
                            [slot] => E3
                            [deal_text] => 
                            [units] => 5
                            [total_units] => 5
                            [amount] => 2620.8333333333
                            [is_freezed] => 
                            [can_sell] => 1
                        )

                )

        )
[2] => Array
        (
            [Anfield] => Array
                (
                    [0] => Array
                        (
                            [slot] => E4
                            [deal_text] => 
                            [units] => 1
                            [total_units] => 0
                            [amount] => 516.66666666667
                            [is_freezed] => 1
                            [can_sell] => 
                        )

                )

        )
[4] => Array
        (
            [Anfield] => Array
                (
                    [0] => Array
                        (
                            [slot] => C8
                            [deal_text] => 
                            [units] => 1
                            [total_units] => 0
                            [amount] => 526.66666666667
                            [is_freezed] => 1
                            [can_sell] => 
                        )
                )

        )
[1] => Array
        (
            [Anfield] => Array
                (
                    [0] => Array
                        (
                            [slot] => D4
                            [deal_text] => 
                            [units] => 1
                            [total_units] => 0
                            [amount] => 557.14285714286
                            [is_freezed] => 1
                            [can_sell] => 
                        )
                )
        )
[3] => Array
        (
            [Anfield] => Array
                (
                    [0] => Array
                        (
                            [slot] => E5
                            [deal_text] => 
                            [units] => 1
                            [total_units] => 0
                            [amount] => 516.66666666667
                            [is_freezed] => 1
                            [can_sell] => 
                        )

                )

        )

以下是我尝试过的解决方案:-

$result = ksort($result);
$result = array_values($result);
$result = array_splice($result, 0, 0);
$result = sort($result);
$result = array_splice($result, 0, count($result));

这是预期的数组:-

Array
(
    [1] => Array
        (
            [Anfield] => Array
                (
                    [0] => Array
                        (
                            [slot] => D4
                            [deal_text] => 
                            [units] => 1
                            [total_units] => 0
                            [amount] => 557.14285714286
                            [is_freezed] => 1
                            [can_sell] => 
                        )
                )
        )

    [2] => Array
        (
            [Anfield] => Array
                (
                    [0] => Array
                        (
                            [slot] => E4
                            [deal_text] => 
                            [units] => 1
                            [total_units] => 0
                            [amount] => 516.66666666667
                            [is_freezed] => 1
                            [can_sell] => 
                        )

                )

        )

    [3] => Array
        (
            [Anfield] => Array
                (
                    [0] => Array
                        (
                            [slot] => E5
                            [deal_text] => 
                            [units] => 1
                            [total_units] => 0
                            [amount] => 516.66666666667
                            [is_freezed] => 1
                            [can_sell] => 
                        )

                )

        )

    [4] => Array
        (
            [Anfield] => Array
                (
                    [0] => Array
                        (
                            [slot] => C8
                            [deal_text] => 
                            [units] => 1
                            [total_units] => 0
                            [amount] => 526.66666666667
                            [is_freezed] => 1
                            [can_sell] => 
                        )
                )

        )

    [5] => Array
        (
            [Anfield] => Array
                (
                    [0] => Array
                        (
                            [slot] => E3
                            [deal_text] => 
                            [units] => 5
                            [total_units] => 5
                            [amount] => 2620.8333333333
                            [is_freezed] => 
                            [can_sell] => 1
                        )

                )

        )

)

没有任何帮助将不胜感激。提前致谢。

【问题讨论】:

  • 嗨,艾玛,现在检查一下,我已经编辑过现在更好了吗。

标签: php arrays sorting multidimensional-array


【解决方案1】:

您将ksort 用作$result = ksort($result);ksort 返回 TRUE/FALSE。这意味着您将其分配给$results。 阅读这里PHP ksort

你的代码应该是:-

ksort($results);

而不是

$result = ksort($result);

您可以使用ksort 进行键排序,这是一个示例

$arr = [
  5 => [1,3],
  3 => [2,3],
  2 => [0,7]
];
ksort($arr);
echo '<pre>';
print_r($arr);

输出

Array
(
[2] => Array
    (
        [0] => 0
        [1] => 7
    )

[3] => Array
    (
        [0] => 2
        [1] => 3
    )

[5] => Array
    (
        [0] => 1
        [1] => 3
    )

  )

【讨论】:

  • 你使用 ksort 作为 $result = ksort($result);,ksort 总是返回 true/false
  • @AlekStephanok 你测试过提供的代码吗?在你的数组上应用相同的
  • @AlekStephanok 答案已更新,请检查
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-02
  • 2012-11-05
相关资源
最近更新 更多