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

上記のような配列があったとします。
この配列内で例えば
'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'で行を認識できればと思います。
これを実現するためのコードを教えてください。

回答の条件
  • 1人1回まで
  • 登録:
  • 終了:2008/06/22 13:51:07
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:Mook No.2

回答回数1314ベストアンサー獲得回数393

ポイント50pt

同じ処理を行う場合は、まとめて関数とするとわかりやすくなると思います。

<?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;
}
?>
id:kou32rr

勉強になります。ありがたいです。

この使い方がはてなで一番有効に感じています。

2008/06/22 13:50:38

その他の回答1件)

id:eed No.1

回答回数1ベストアンサー獲得回数0

ポイント35pt

foreach( $list as $item )

{

if( $item['id'] == 'b' )

{

$item['product'] = 'bigpork';

$item['cost'] '400'

}

if( $item['id'] == 'd' )

{

$item['product'] = 'littlechicken';

$item['cost'] '100'

}

}

id:kou32rr

ごもっともな回答ですね。

ありがとうございます。

シンプルでよいです。

2008/06/22 13:48:33
id:Mook No.2

回答回数1314ベストアンサー獲得回数393ここでベストアンサー

ポイント50pt

同じ処理を行う場合は、まとめて関数とするとわかりやすくなると思います。

<?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;
}
?>
id:kou32rr

勉強になります。ありがたいです。

この使い方がはてなで一番有効に感じています。

2008/06/22 13:50:38

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません