如何在PHP中更改数组的键?

如何在PHP中更改数组的键?,php,arrays,sorting,Php,Arrays,Sorting,我有以下数组: array(10) { [0]=> array(2) { ["id"]=> string(2) "73" ["position"]=> string(1) "1" } [1]=> array(2) { ["id"]=> string(2) "58" ["position"]=> string(1) "2" } [2]=> array(2) {

我有以下数组:

array(10) {
  [0]=>
  array(2) {
    ["id"]=>
    string(2) "73"
    ["position"]=>
    string(1) "1"
  }
  [1]=>
  array(2) {
    ["id"]=>
    string(2) "58"
    ["position"]=>
    string(1) "2"
  }
  [2]=>
  array(2) {
    ["id"]=>
    string(2) "82"
    ["position"]=>
    string(1) "3"
  }
  [3]=>
  array(2) {
    ["id"]=>
    string(2) "84"
    ["position"]=>
    string(1) "4"
  }
  [4]=>
  array(2) {
    ["id"]=>
    string(2) "74"
    ["position"]=>
    string(1) "5"
  }
  [5]=>
  array(2) {
    ["id"]=>
    string(2) "59"
    ["position"]=>
    string(1) "6"
  }
  [6]=>
  array(2) {
    ["id"]=>
    string(2) "72"
    ["position"]=>
    string(1) "7"
  }
  [7]=>
  array(2) {
    ["id"]=>
    string(2) "78"
    ["position"]=>
    string(1) "7"
  }
  [8]=>
  array(2) {
    ["id"]=>
    string(2) "77"
    ["position"]=>
    string(1) "8"
  }
  [9]=>
  array(2) {
    ["id"]=>
    string(2) "71"
    ["position"]=>
    string(1) "8"
  }
}
我希望将数组的索引替换为位置值。输出应如下所示:

array(10) {
  [1]=>
  array(2) {
    ["id"]=>
    string(2) "73"
    ["position"]=>
    string(1) "1"
  }
  [2]=>
  array(2) {
    ["id"]=>
    string(2) "58"
    ["position"]=>
    string(1) "2"
  }
  [3]=>
  array(2) {
    ["id"]=>
    string(2) "82"
    ["position"]=>
    string(1) "3"
  }
  [4]=>
  array(2) {
    ["id"]=>
    string(2) "84"
    ["position"]=>
    string(1) "4"
  }
  [5]=>
  array(2) {
    ["id"]=>
    string(2) "74"
    ["position"]=>
    string(1) "5"
  }
  [6]=>
  array(2) {
    ["id"]=>
    string(2) "59"
    ["position"]=>
    string(1) "6"
  }
  [7]=>
  array(2) {
    ["id"]=>
    string(2) "72"
    ["position"]=>
    string(1) "7"
  }
  [7]=>
  array(2) {
    ["id"]=>
    string(2) "78"
    ["position"]=>
    string(1) "7"
  }
  [8]=>
  array(2) {
    ["id"]=>
    string(2) "77"
    ["position"]=>
    string(1) "8"
  }
  [8]=>
  array(2) {
    ["id"]=>
    string(2) "71"
    ["position"]=>
    string(1) "8"
  }
}
我尝试了以下代码,但它只打印数组中的一个元素:

$newarr = array();

$values = $this->request->get( 'values', null );

foreach ($values as $oldkey => $value) {
    $position = $value["position"];
    $newarr[$position] = $values[$oldkey];
    $values=$newarr;
    unset($newarr);
}
var_dump($values);exit;
$values
的变量转储结果为

<br />
<b>Notice</b>:  Undefined offset: 8 in ResourcesController.php</b> 
<b>Notice</b>:  Undefined offset: 9 in ResourcesController.php</b> on line <b>367</b><br />
array(1) {
  [8]=>
  NULL
}`

注意:ResourcesController.php中未定义的偏移量:8 注意:第367行ResourcesController.php中未定义的偏移量:9
阵列(1){ [8]=> 无效的 }`
将足以帮助您解决问题

$result = array_column($yourarray, null, 'position');
列\u键要返回的值列。此值可以是的整数键 要检索的列,或者它可能是 关联数组或属性名称。返回值也可能为NULL 完整的数组或对象(与索引键一起使用对 重新编制数组的索引)

语法

array_column ( array $input , mixed $column_key [, mixed $index_key = NULL ] ) : array

工作。

您可以使用
数组组合()
以及
范围()
计数()

输出:-

参考:


你不能那样做。不能有具有多个值且具有相同键的数组。不能有具有相同值的索引。您有多个具有相同值的位置-它们不是唯一的,因此不能用作数组中的索引。很好!一开始我没看到glance@Nick是的,这是一个输入错误。那么,如果两个位置相同,会发生什么呢?您的工作演示无法工作,因为它删除了两个位置items@Andreas这是个打字错误,没关系。您的方法将截断任何重复的位置键摘要。。。侵略性的你希望我为你把每一个字都用棉花包起来吗?我是说你的方法会截断数据。这是一个事实,这不是攻击性的。数据是错误的,所以它将被截断。但是啊,是的,我错了,你是对的。参加主持人选举我将是第一个投票支持你的人;)你正在做最好的事情,所以要改善周围的事情是的,这是一个打字错误!
$array = array_combine(range(1, count($arr)), $arr);