PHPのキーに従って配列の合計値を追加する方法
私はこのようなphpの配列を持っています
Array
(
[0] => Array
(
[Sr_No] => 1
[Asan_Category] => Warm-Up
[Asan_Cat_Val] => 8
[Asan_Sub_Category] => Ankle
[Asan_Sub_Cat_Val] => 35
[Asan_Name] => General Ankle Warm up
[Asan_Name_Val] => 447
[Prescribed_Steps] => 40
[Prescribed_Ratio] => 00
[Actual_Steps] => 12
[Actual_Ratio] => 0
)
[1] => Array
(
[Sr_No] => 2
[Asan_Category] => Warm-Up
[Asan_Cat_Val] => 8
[Asan_Sub_Category] => Knee
[Asan_Sub_Cat_Val] => 111
[Asan_Name] => General knee warm up
[Asan_Name_Val] => 464
[Prescribed_Steps] => 20
[Prescribed_Ratio] => 00
[Actual_Steps] => 14
[Actual_Ratio] => 0
)
[2] => Array
(
[Sr_No] => 1
[Asan_Category] => Warm-Up
[Asan_Cat_Val] => 8
[Asan_Sub_Category] => Ankle
[Asan_Sub_Cat_Val] => 35
[Asan_Name] => General Ankle Warm up
[Asan_Name_Val] => 447
[Prescribed_Steps] => 40
[Prescribed_Ratio] => 00
[Actual_Steps] => 10
[Actual_Ratio] => 0
)
[3] => Array
(
[Sr_No] => 2
[Asan_Category] => Warm-Up
[Asan_Cat_Val] => 8
[Asan_Sub_Category] => Knee
[Asan_Sub_Cat_Val] => 111
[Asan_Name] => General knee warm up
[Asan_Name_Val] => 464
[Prescribed_Steps] => 20
[Prescribed_Ratio] => 00
[Actual_Steps] => 9
[Actual_Ratio] => 0
)
)
The desired output I want
Array
(
[0] => Array
(
[Asan_Id] => 447
[Asan_Category] => Warm-Up
[Asan_Sub_Category] => Ankle
[Asan_Name] => General Ankle Warm up
[Prescribed_Steps] => 40
[Prescribed_Ratio] => 00
[Total_Steps] => 22
)
[1] => Array
(
[Asan_Id] => 464
[Asan_Category] => Warm-Up
[Asan_Sub_Category] => Knee
[Asan_Name] => General knee warm up
[Prescribed_Steps] => 20
[Prescribed_Ratio] => 00
[Total_Steps] => 23
)
)
繰り返しているデータを1つにしたいのですが、実際のステップ数が異なると、合計で合計ステップ数になります。 私はいくつかのコードを試しましたが、このように成功しなかったので、私を助けてください
$asan=[];
$total_steps=0;
foreach ($aasan_details as $key) {
$total_steps += $key['Actual_Steps'];
if(!in_array($key['Asan_Name_Val'],$asan))
{
$asan[] = $key['Asan_Name_Val'];
$lookup[] = array("Asan_Id"=>$key['Asan_Name_Val'],
"Asan_Category"=>$key['Asan_Category'],
"Asan_Sub_Category"=>$key['Asan_Sub_Category'],
"Asan_Name"=>$key['Asan_Name'],
"Prescribed_Steps"=>$key['Prescribed_Steps'],
"Prescribed_Ratio"=>$key['Prescribed_Ratio'],
'Total_Steps'=>$total_steps);
}
}
動作していません。どうすればよいですか、助けてください
ここで、 $aasan_details
は上に示した配列であり、ルックアップ配列では一意の値を取得していますが、合計は取得していません
答え :
解決策:
最善の解決策は、これをデータベースに移動し、クエリを使用してその正確な操作を実行することです。
ただし、コードで行う必要がある場合は、キー付き配列を使用して基本的にグループ化できますが、結合するには多くのフィールドが一致する必要があります:
例
foreach ..
$consolidated[$item['Asan_Cat_Val']][$item['Asan_Sub_Cat_Val']][] = $item;
次に、ネストされたループをいくつか作成して、これを調べてすべてを合計します。
答え :
解決策:
ここで説明するのに役立つテクニックがいくつかあります...
-
出力配列に保持(コピー)することがわかっているキーのコレクションを確立することにより、ループ配列宣言の眼精疲労を軽減できます。これにより、 thisのように各
$keyName => $row[$keyName],
を入力する必要がなくなります(ただし、最終的には幸せになります)。 -
出力配列を構築する際に(
$id
を使用して)一時的な関連付けキーを宣言し、isset()
が超高速になるようにします既存のグループをチェックします。 -
グループがまだ設定されていない場合は、元のキーのデータと一緒に新しいキーのデータを保存します。算術演算は必要ありません。スニペットの
+
シンボルは「加算演算子」ではなく、「配列結合演算子」です。関数呼び出しなしで3つの配列をマージしています(それ以外の場合は{ -code-5}
も同じことをします。 -
配列の反復が終了したら、
array_values()
を呼び出して、結果のインデックスを再作成する(一時的な連想キーを削除する)ことを選択できます。これらの一時キーの存在に悩まされていない場合は、関数呼び出しを省略できます。 -
以前にグループに遭遇したことがある場合は、
Total_steps
を変更するだけで済みます。簡単な構文には、加算代入演算子(+ =
)を使用します。コード:(デモ)
$ keysToKeep = array_flip(['Asan_Category'、'Asan_Sub_Category'、'Asan_Name'、'Prescribed_Steps'、'Prescribed_Ratio']); foreach($ array as $ row){ $id = $ row ['Asan_Name_Val']; if(!isset($ result [$id])){ $ result [$id] = ['Asan_Id' => $id] + array_intersect_key($ row、$ keysToKeep)+ ['Total_Steps' => $ row ['Actual_Steps']]; } そうしないと { $ result [$id] ['Total_Steps'] + = $ row ['Actual_Steps']; } } var_export(array_values($ result));
出力:
array ( 0 => array ( 'Asan_Id' => '447', 'Asan_Category' => 'Warm-Up', 'Asan_Sub_Category' => 'Ankle', 'Asan_Name' => 'General Ankle Warm up', 'Prescribed_Steps' => '40', 'Prescribed_Ratio' => '00', 'Total_Steps' => 22, ), 1 => array ( 'Asan_Id' => '464', 'Asan_Category' => 'Warm-Up', 'Asan_Sub_Category' => 'Knee', 'Asan_Name' => 'General knee warm up', 'Prescribed_Steps' => '20', 'Prescribed_Ratio' => '00', 'Total_Steps' => 23, ), )
同様の質問
私たちのウェブサイトで同様の質問で答えを見つけてください。