-1

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

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' ) )
)

用名称索引替换 0 和 1 - test 或 test2

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

function index_array( $array, $index ){

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

return $new_array;
}
4

2 回答 2

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

由于表达式的右侧是在赋值之前评估的,因此您也可以$array在两侧使用而不是不同的变量名。

于 2012-07-25T19:43:51.263 回答
0

我会为第一部分使用映射表,或者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字段用作替换时会发生这种情况。

于 2012-07-25T19:51:27.233 回答