こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

配列に要素を追加する方法

PHP勉強中です。よろしくお願いします。
配列$colorに$sizeのsizeを追加したいのですが、
たとえば下記の場合どのようにすればよいのでしょうか?

$color
Array (
[0] => Array ( [serial] => 15802 [color] => red )
[1] => Array ( [serial] => 15802 [color] => black )
[2] => Array ( [serial] => 15802 [color] => blue )
[3] => Array ( [serial] => 15802 [color] => pink )
[4] => Array ( [serial] => 15802 [color] => glay )
[5] => Array ( [serial] => 15802 [color] => green )
)

$size
Array (
[0] => Array ( [serial] => 15802 [size] => 5.5 )
[1] => Array ( [serial] => 15802 [size] => 6.5 )
[2] => Array ( [serial] => 15802 [size] => 8.0 )
[3] => Array ( [serial] => 15802 [size] => 2.5 )
[4] => Array ( [serial] => 15802 [size] => 1.0 )
[5] => Array ( [serial] => 15802 [size] => 3.2 )
)


$color
Array (
[0] => Array ( [serial] => 15802 [color] => red [size] => 5.5 )
[1] => Array ( [serial] => 15802 [color] => black [size] => 6.5 )
[2] => Array ( [serial] => 15802 [color] => blue [size] => 8.0 )
[3] => Array ( [serial] => 15802 [color] => pink [size] => 2.5 )
[4] => Array ( [serial] => 15802 [color] => glay [size] => 1.0 )
[5] => Array ( [serial] => 15802 [color] => green [size] => 3.2 )
)

投稿日時 - 2011-10-06 05:24:07

QNo.7054428

すぐに回答ほしいです

質問者が選んだベストアンサー

> foreach ($color as $v) {
>
> $v["size"] = $size;
> }
>
> うまくいきませんでした。

そうですね。これだと $color の内容に反映されません。

ANo2 で紹介されているリファレンスを使うのであれば、& をつける必要があります。

foreach ($color as &$v) {
$v["size"] = $size;
}

参照URL:
http://php.net/manual/ja/control-structures.foreach.php

> foreach ($color as $key=>$arr) {
>  $color[$key]['size']=$size;
> }
>
> と言うことで解決できたようなのですが、問題なかったでしょうか?

特段問題ないと思います。 (むしろANo1が冗長だったかなぁと)
質問では size がいろいろな値でしたが、実際には1種類ということですね。

投稿日時 - 2011-10-13 06:24:05

お礼

$sizeは$colorをforeachで回して取得される結果を元に、
別のfunctionで取得されていたので、
結果1個づつと言うことでした。

最初そこまで見えてなかったので質問を間違えてしまいました。
お手数おかけしました。
ありがとございます。

投稿日時 - 2011-10-13 11:26:24

ANo.3

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.2

PHP5以上であればforeachでリファレンス参照ができるので
ちょっとだけ便利

foreach($color as $key=> &$arr){
$arr["size"]= $size[$key]["size"];
}

投稿日時 - 2011-10-06 09:34:07

補足

質問の仕方を間違えました。
$colorは配列ですが、
追加したい$sizeは配列ではなく変数でした。

foreach ($color as $v) {

$v["size"] = $size;
}

うまくいきませんでした。
引き続きよろしくお願いします。

投稿日時 - 2011-10-12 12:20:18

お礼

自己解決なんですが、
foreach ($color as $key=>$arr) {
 $color[$key]['size']=$size;
}
と言うことで解決できたようなのですが、問題なかったでしょうか?

投稿日時 - 2011-10-12 15:19:32

ANo.1

$size の 0 番目の要素の size の値を $color の 0 番目の要素の size にセット
$size の 1 番目の要素の size の値を $color の 1 番目の要素に size にセット
$size の 2 番目の要素の size の値を $color の 2 番目の要素に size にセット
....

ということであれば、ループで配列の要素を列挙して
追加していけばいいかと思います。

■foreach

foreach($color as $key=>$color_item){
$size_item = $size[$key];
$color_item['size'] = $size_item['size'];
$color[$key] = $color_item;
}

■for

$color_count = count($color);
for($i = 0; $i < $color_count; $i++){
$color[$i]['size'] = $size[$i]['size'];
}

投稿日時 - 2011-10-06 08:05:51

補足

同じ補足になりますが、

質問の仕方を間違えました。
$colorは配列ですが、
追加したい$sizeは配列ではなく変数でした。

foreach ($color as $v) {

$v["size"] = $size;
}

うまくいきませんでした。
引き続きよろしくお願いします。

投稿日時 - 2011-10-12 12:21:07

お礼

自己解決なんですが、
foreach ($color as $key=>$arr) {
 $color[$key]['size']=$size;
}
と言うことで解決できたようなのですが、問題なかったでしょうか?

投稿日時 - 2011-10-12 15:19:52

あなたにオススメの質問