0

ユーザーが化学と生物学に割引価格を入力したとしたら、更新する方法を教えてください。ユーザーのネストされた配列、itemprice に移動してその値を更新するにはどうすればよいですか?

    [name] => xxxx
    [phone] => xxxxx
    [email]xxxxx
    [itemprices] => Array ( [0] => 1.00 [1] => 1.00 [2] => 1.00)
    [iteminfo] => Array ( [0] => Chemistry [1] => Biology [2] => Mathematics) 
    )

以下の解決策を試してみましたが、化学だけを更新すると、生物学と数学のアイテムが一緒に更新されます。

どうしてこんなことに?

$subject = 'Chemistry';
$index = array_search($subject, $user->iteminfo);
if (false !== $index) {
  $user->itemprices[$index] = $newvalue;
}
4

2 に答える 2

1

それは魅力のように機能します。私はそれを書き直します。試してみることができます

$user = (object) array(
    'name' => 'xxxx',
    'phone' => 'xxxxx',
    'itemprices' => Array (1.00, 1.00, 1.00),
    'iteminfo' => Array ('Chemistry', 'Biology', 'Mathematics') 
    );

echo "<pre>";
var_dump($user);
echo "</pre>";


$newvalue = 2.0;
$subject = 'Chemistry';

$index = array_search($subject, $user->iteminfo);
if (false !== $index) {

  $user->itemprices[$index] = $newvalue;

}

echo "<br><br><pre>";
var_dump($user);
echo "</pre>";

出力

object(stdClass)#21 (4) {
  ["name"]=>
  string(4) "xxxx"
  ["phone"]=>
  string(5) "xxxxx"
  ["itemprices"]=>
  array(3) {
    [0]=>
    float(1)
    [1]=>
    float(1)
    [2]=>
    float(1)
  }
  ["iteminfo"]=>
  array(3) {
    [0]=>
    string(9) "Chemistry"
    [1]=>
    string(7) "Biology"
    [2]=>
    string(11) "Mathematics"
  }
}


object(stdClass)#21 (4) {
  ["name"]=>
  string(4) "xxxx"
  ["phone"]=>
  string(5) "xxxxx"
  ["itemprices"]=>
  array(3) {
    [0]=>
    float(2)
    [1]=>
    float(1)
    [2]=>
    float(1)
  }
  ["iteminfo"]=>
  array(3) {
    [0]=>
    string(9) "Chemistry"
    [1]=>
    string(7) "Biology"
    [2]=>
    string(11) "Mathematics"
  }
}
于 2013-09-20T09:47:18.200 に答える
0

オブジェクトと配列が混在している場合、$user->iteminfo を $user['iteminfo'] に変更し、$user->itemprices[$index] を $user['itemprices'][$index] に変更すると、正しく機能します。

于 2013-09-20T12:43:52.477 に答える