こういう配列
$tests = array(
array(
'price' => 100,
'name' => 'hoge'),
array(
'price' => 200,
'name' => 'huga'),
array(
'price' => 300,
'name' => 'piyo')
);
var_dump($tests);
indexあるけど、1から始まるid付けたい
こうした
foreach($tests as $index => $test){
$id = 1 + $index;
$tests[$index] = array_merge($test,array('id'=>$id));
}
var_dump($tests);
実行結果
array(3) {
[0]=>
array(3) {
["price"]=>
int(100)
["name"]=>
string(4) "hoge"
["id"]=>
int(1)
}
[1]=>
array(3) {
["price"]=>
int(200)
["name"]=>
string(4) "huga"
["id"]=>
int(2)
}
[2]=>
array(3) {
["price"]=>
int(300)
["name"]=>
string(4) "piyo"
["id"]=>
int(3)
}
}
idついたなあ
そもそも
PHPの公式マニュアル見ると
https://www.php.net/manual/ja/function.array.php
$tests = array(
1 => array(
'price' => 100,
'name' => 'hoge'),
array(
'price' => 200,
'name' => 'huga'),
array(
'price' => 300,
'name' => 'piyo')
);
これで1からindexが始まる配列を作成できるので
foreachの部分はこうなる
foreach($tests as $index => $test){
$tests[$index] = array_merge($test,array('id'=>$index));
}
自分のプロジェクトでは、配列を$test=array()
みたいな感じで定義するということがなかったので、最初の方式にした
連想配列だったらどうすんの
$tests = array(
'hoo' => array(
'price' => 100,
'name' => 'hoge'),
'ahh'=> array(
'price' => 200,
'name' => 'huga'),
'poo'=> array(
'price' => 300,
'name' => 'piyo')
);
foreach($tests as $index => $test){
$tests[$index] = array_merge($test,array('id'=>$index));
}
var_dump($tests);
実行結果
array(3) {
[0]=>
array(3) {
["price"]=>
int(100)
["name"]=>
string(4) "hoge"
["id"]=>
string(3) "hoo"
}
[1]=>
array(3) {
["price"]=>
int(200)
["name"]=>
string(4) "huga"
["id"]=>
string(3) "ahh"
}
[2]=>
array(3) {
["price"]=>
int(300)
["name"]=>
string(4) "piyo"
["id"]=>
string(3) "poo"
}
}
それはそう
解決法
$index=1;
foreach($tests as $key => $test){
$tests[$key] = array_merge($test,array('id'=>$index));
$index++;
}
var_dump($tests);
実行結果
array(3) {
["hoo"]=>
array(3) {
["price"]=>
int(100)
["name"]=>
string(4) "hoge"
["id"]=>
int(1)
}
["ahh"]=>
array(3) {
["price"]=>
int(200)
["name"]=>
string(4) "huga"
["id"]=>
int(2)
}
["poo"]=>
array(3) {
["price"]=>
int(300)
["name"]=>
string(4) "piyo"
["id"]=>
int(3)
}
}
なんか他にスマートな方法ありそう
終わりに
ベストプラクティスあったら教えて頂きたいです