如何在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);