更改数组的索引

时间:2012-07-25 19:42:40

标签: php arrays

我想更改数组的索引,但我不知道该怎么做.. 以下数组

array(
0 => array ( 'id' => 33, 'name' => 'test' )
1 => array ( 'id' => 37, 'name' => 'test2' )
)

应该成为 - 如果我想要索引

array(
33 => array ( 'id' => 33, 'name' => 'test' )
37 => array ( 'id' => 37, 'name' => 'test2' )
)

或者如果我想要名字

array(
test => array ( 'id' => 33, 'name' => 'test' )
test2 => array ( 'id' => 37, 'name' => 'test2' )
)

也适用于多维数组

array(
0 => array ( 'id' => 33, 'details' => array (name => 'test' , age ='50' ) )
1 => array ( 'id' => 37, 'details' => array (name => 'test2' , age ='60' ) )
)

索引用名称 - test或test2

替换0和1

现在我做了一个函数但是没有使用多维数组

function index_array( $array, $index ){

$new_array = array();
foreach($array as $key => $value){
    $new_array[$index] = $array[$key];  
}

return $new_array;
}

2 个答案:

答案 0 :(得分:3)

$array = array(33 => $oldarray[0], 37 => $oldarray[1]);
$array = array('test' => $oldarray[0], 'test2' => $oldarray[1]);

由于在分配之前评估表达式的右侧,您还可以在两侧使用$array而不是使用不同的变量名称。

答案 1 :(得分:1)

我会使用第一部分的映射表,或第二部分的简单foreach

<?php

$arr = array(
    0 => array( 'id' => 33, 'name' => 'test' ),
    1 => array( 'id' => 37, 'name' => 'test2' )
);

/* Convert to other indexes */
$mapping = array(
    0 => 33,
    1 => 37
);

foreach($arr as $k => $v){
    unset($arr[$k]);
    $arr[$mapping[$k]] = $v;
}

print_r($arr);

/* Convert key to name field */
foreach($arr as $k => $v){
    unset($arr[$k]);
    $arr[$v['name']] = $v;
}

print_r($arr);

编辑:现在我再次阅读了您的问题,第一部分实际上与第二部分相同,但仅使用id字段而不是name字段。

EDIT2 :请注意,您必须使用另一个数组来写入,以避免覆盖,这将在id字段用作替换时发生。