$list = array();
$list[] = array('id' => a, 'product' => 'mikan', 'cost' => '100');
$list[] = array('id' => b, 'product' => 'pork', 'cost' => '200');
$list[] = array('id' => c, 'product' => 'apple', 'cost' => '500');
$list[] = array('id' => d, 'product' => 'chicken', 'cost' => '300');
$list[] = array('id' => e, 'product' => 'beef', 'cost' => '200');
上記のような配列があったとします。
この配列内で例えば
'id' => b, 'product' => 'pork', 'cost' => '200' の行を
'id' => b, 'product' => 'bigpork', 'cost' => '400' に変更し、
'id' => d, 'product' => 'chicken', 'cost' => '300'の行を
'id' => d, 'product' => 'littlechicken', 'cost' => '100'に変更したいと思います。
それぞれ 'id'で行を認識できればと思います。
これを実現するためのコードを教えてください。
同じ処理を行う場合は、まとめて関数とするとわかりやすくなると思います。
<?php $list = array(); $list[] = array('id' => a, 'product' => 'mikan', 'cost' => '100'); $list[] = array('id' => b, 'product' => 'pork', 'cost' => '200'); $list[] = array('id' => c, 'product' => 'apple', 'cost' => '500'); $list[] = array('id' => d, 'product' => 'chicken', 'cost' => '300'); $list[] = array('id' => e, 'product' => 'beef', 'cost' => '200'); print "変更前<BR>\n"; print_array( $list ); update_data( $list, 'b', 'bigpork','400' ); update_data( $list, 'c', 'littlechiken','100' ); print "変更後<BR>\n"; print_array( $list ); // 配列表示関数 function print_array( $list ) { while(list($key,$value) = each($list)){ print " id = ".$value['id'].", "; print " product = ".$value['product'].", "; print " cost = ".$value['cost']."<br>"; } print "<BR>\n"; } // 配列データ更新関数 function update_data( &$list, $id, $newProduct, $newCost ) { for( $i=0 ; $i<count($list) ; $i++ ) { if ( $list[$i]['id'] == $id ) { $list[$i]['product'] = $newProduct; $list[$i]['cost'] = $newCost; } } }
なお今回の場合、id がユニークなものであれば、array の中のデータではなく、$list の インデックス
とすることで、処理を簡易化することができると思います。
ご参考までに、インデックスとした例です。
$list = array(); $list['a'] = array( 'product' => 'mikan', 'cost' => '100'); $list['b'] = array( 'product' => 'pork', 'cost' => '200'); $list['c'] = array( 'product' => 'apple', 'cost' => '500'); $list['d'] = array( 'product' => 'chicken', 'cost' => '300'); $list['e'] = array( 'product' => 'beef', 'cost' => '200'); print "変更前<BR>\n"; print_array( $list ); update_data( $list, 'b', 'bigpork','400' ); update_data( $list, 'c', 'littlechiken','100' ); print "変更後<BR>\n"; print_array( $list ); // 配列表示関数 function print_array( $list ) { while(list($key,$value) = each($list)){ print " id = ".$key.", "; print " product = ".$value['product'].", "; print " cost = ".$value['cost']."<br>"; } print "<BR>\n"; } // 配列データ更新関数 function update_data( &$list, $id, $newProduct, $newCost ) { $list[$id]['product'] = $newProduct; $list[$id]['cost'] = $newCost; } ?>
foreach( $list as $item )
{
if( $item['id'] == 'b' )
{
$item['product'] = 'bigpork';
$item['cost'] '400'
}
if( $item['id'] == 'd' )
{
$item['product'] = 'littlechicken';
$item['cost'] '100'
}
}
ごもっともな回答ですね。
ありがとうございます。
シンプルでよいです。
同じ処理を行う場合は、まとめて関数とするとわかりやすくなると思います。
<?php $list = array(); $list[] = array('id' => a, 'product' => 'mikan', 'cost' => '100'); $list[] = array('id' => b, 'product' => 'pork', 'cost' => '200'); $list[] = array('id' => c, 'product' => 'apple', 'cost' => '500'); $list[] = array('id' => d, 'product' => 'chicken', 'cost' => '300'); $list[] = array('id' => e, 'product' => 'beef', 'cost' => '200'); print "変更前<BR>\n"; print_array( $list ); update_data( $list, 'b', 'bigpork','400' ); update_data( $list, 'c', 'littlechiken','100' ); print "変更後<BR>\n"; print_array( $list ); // 配列表示関数 function print_array( $list ) { while(list($key,$value) = each($list)){ print " id = ".$value['id'].", "; print " product = ".$value['product'].", "; print " cost = ".$value['cost']."<br>"; } print "<BR>\n"; } // 配列データ更新関数 function update_data( &$list, $id, $newProduct, $newCost ) { for( $i=0 ; $i<count($list) ; $i++ ) { if ( $list[$i]['id'] == $id ) { $list[$i]['product'] = $newProduct; $list[$i]['cost'] = $newCost; } } }
なお今回の場合、id がユニークなものであれば、array の中のデータではなく、$list の インデックス
とすることで、処理を簡易化することができると思います。
ご参考までに、インデックスとした例です。
$list = array(); $list['a'] = array( 'product' => 'mikan', 'cost' => '100'); $list['b'] = array( 'product' => 'pork', 'cost' => '200'); $list['c'] = array( 'product' => 'apple', 'cost' => '500'); $list['d'] = array( 'product' => 'chicken', 'cost' => '300'); $list['e'] = array( 'product' => 'beef', 'cost' => '200'); print "変更前<BR>\n"; print_array( $list ); update_data( $list, 'b', 'bigpork','400' ); update_data( $list, 'c', 'littlechiken','100' ); print "変更後<BR>\n"; print_array( $list ); // 配列表示関数 function print_array( $list ) { while(list($key,$value) = each($list)){ print " id = ".$key.", "; print " product = ".$value['product'].", "; print " cost = ".$value['cost']."<br>"; } print "<BR>\n"; } // 配列データ更新関数 function update_data( &$list, $id, $newProduct, $newCost ) { $list[$id]['product'] = $newProduct; $list[$id]['cost'] = $newCost; } ?>
勉強になります。ありがたいです。
この使い方がはてなで一番有効に感じています。
勉強になります。ありがたいです。
この使い方がはてなで一番有効に感じています。