【问题标题】:Keep keys when shifting associative array移动关联数组时保留键
【发布时间】:2020-03-24 14:06:05
【问题描述】:

我有这个数组(json_encoded):

string(86) "{
"1": "1",
"2": "2",
"3": "3",
"4": "4",
"6": "5",
"7": "6"
}" 

当使用这个功能时:

function moveElement(&$array, $a, $b) {
    $out = array_splice($array, $a, 1);
    array_splice($array, $b, 0, $out);
}

我得到这个输出:

string(56) "[
    "3",
    "1",
    "2",
    "4",
    "5",
    "6"
]"

谁能解释一下为什么我丢失了所有钥匙? 谢谢!

【问题讨论】:

  • $a$b你的输入参数是什么?
  • 它不是数组,而是带有数字键的对象(对象中的键本质上是无序的)
  • 2, 0 是输入@AksenP
  • 有什么办法可以保留我的钥匙吗? @IłyaBursov
  • @acuz3r 保留密钥 - 不要使用拼接

标签: php arrays sorting


【解决方案1】:

你可以组合拼接的键和拼接的值:

function custom_splice(&$ar, $a, $b){
    $out = array_splice($ar, $a, 1);
    array_splice($ar, $b, 0, $out);
}

function moveElement(&$array, $a, $b) {
    $keys = array_keys($array);

    custom_splice($array, $a, $b);
    custom_splice($keys, $a, $b); 

    $array = array_combine($keys,$array);
}

Demo

【讨论】:

  • 我做了类似的事情,我将密钥存储在另一个数组中,然后使用array_combine()
猜你喜欢
  • 1970-01-01
  • 2013-03-16
  • 1970-01-01
  • 1970-01-01
  • 2023-01-13
  • 1970-01-01
  • 2022-01-21
  • 2015-03-11
  • 1970-01-01
相关资源
最近更新 更多