-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、2 番目の部分には単純なテーブルを使用します。

<?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);

編集:あなたの質問をもう一度読んだので、最初の部分は実際には2番目の部分と同じですが、idフィールドの代わりにnameフィールドがあります。

EDIT2id :フィールドが置換として使用されるときに発生するオーバーライドを回避するために、別の配列を使用して書き込む必要があることに注意してください。

于 2012-07-25T19:51:27.233 に答える