に永続的に更新していないコードは次のとおりです。アレイは一時的に更新しますが、PHP
if($condition == 'condition1' || $condition == 'condition2')
{
$found = false;
//loop through the array of customers contracts
foreach($cust_cont as $cust)
{
//if the customer is found
if ($cust["customer"] == $customer)
{
$temp = floatval($cust["hoursThisPer"]);
$temp += $time;
$cust["hoursThisPer"] = $temp;
$found = true;
}
}
if ($found == false)
{
$cust_cont[] = array("customer" => "$customer", "hoursUsed" => $hoursUsed,
"hoursAvail" => $allowed, "hoursThisPer" => (0 + $time));
}
}
だから、私はこれを行うために取得しようとしているものを、アレイを横断しています。配列にがある場合、その顧客の使用時間に時間を追加したいと思います。 がでない場合は、その顧客のエントリを作成し、その値を初期化します。
アレイのエントリが正しく初期化されていますが、更新しようとすると何か不安が起こります。たとえば、配列にcustomer1があり、customer1のhoursThisPerに追加したい場合は、その場所に追加する動作を行います。ただし、次に更新する必要があるときは、customer1のhoursThisPerは更新された値ではなく初期値に設定されます。私は自分の論理の欠陥を理解することはできません。ヘルプは非常に高く評価されます。私はいくつかのサンプル出力を持っています。
Customer1:0.25
time: 0.25
temp: 0.5
0.5
Customer1:0.25
time: 1.50
temp: 1.75
1.75
Customer1:0.25
time: 0.50
temp: 0.75
0.75
フォーマットは、「顧客:初期時刻」です。追加する時間。初期時間+追加時間の予想合計。更新された後の配列の値。見つかった顧客の次のインスタンス(およびサイクルが継続する)。
foreachの配列を変更する 'foreach($ cust_cont as&$ cust)' – splash58
これは機能します!どうもありがとうございました!私は正直に言うつもりですが、私はそれがなぜ機能するのか分かりません。それが何であり、それがなぜ機能するのかを教えてくれる方法はありますか? – dmcoding
@dmcoding変数の前の '&'記号は参照渡しになります。 '$ cust'をコピーとして追加するのではなく、配列の値を参照しない場合。 –