

Yj
こんにちは!!お疲れ様です。続いて「辞書」☺️
STEP: 1 辞書の基本
下記の問題は連想配列を使いました。こちら参考にしました。
<?php
$n = trim(fgets(STDIN));
for($i=0; $i<$n; $i++){
$nam_pro = explode(" ", trim(fgets(STDIN)));
$key = $nam_pro[0];
$value = $nam_pro[1];
$set[$key] = $value;
}
$s = trim(fgets(STDIN));
foreach($set as $name => $property){
if($name == $s){
echo $property . "\n";
}
}
?>
STEP: 2 辞書のデータ更新
下記の問題で「値のvalueの有無の確認の為is_null( )にを使いました。」こちら参考にしました。
<?php
$n = trim(fgets(STDIN));
for($i=0; $i<$n; $i++){
$name_order[] = trim(fgets(STDIN));
}
$m = trim(fgets(STDIN));
//連想配列にして
for($j=0; $j<$m; $j++){
$array = explode(" ", trim(fgets(STDIN)));
$name = $array[0];
$damage = $array[1];
$set[$name] += $damage;//同じvalueのkeyを足し合わせる。
}
$s = trim(fgets(STDIN));
//もし指定されたSが受けるダメージがない場合0を出力
if(is_null($set[$s])){
echo 0 . "\n";
}
//受けるダメージを出力する
echo $set[$s];
?>
STEP: 3 辞書データの順序
<?php
$n = trim(fgets(STDIN));
for($i=0; $i<$n; $i++){
$s[] = trim(fgets(STDIN));
}
// print_r($s);
$m = trim(fgets(STDIN));
for($j=0; $j<$m; $j++){
$p_a = explode(" ", trim(fgets(STDIN)));
$name = $p_a[0];
$damage = $p_a[1];
$p_damage[$name] += $damage;
}
// print_r($p_damage);
sort($s);
foreach($s as $value){
if(is_null($p_damage[$value])){
$p_damage[$value] = 0;
// echo $p_damage[$value] . "\n";
}
echo $p_damage[$value] . "\n";
// echo $value . "\n";
}
?>
FINAL問題 辞書
<?php
list($num_A, $num_B, $num_C) = explode(" ", trim(fgets(STDIN)));
// echo $group_A." ".$group_B." ".$group_C;
for($i=0; $i<$num_A; $i++){
$group_AB = explode(" ", trim(fgets(STDIN)));
$A = $group_AB[0];
$B = $group_AB[1];
$set[$A] = $B;
}
//Aが小さい順に
ksort($set);
//print_r($set);//Array([1] => 3 [2] => 1)
for($i=0; $i<$num_B; $i++){
$group_BC = explode(" ", trim(fgets(STDIN)));
$B = $group_BC[0];
$C = $group_BC[1];
$group[$B] = $C;
}
foreach($set as $a_key => $b_value){
// echo $a_key . " " . $b_value . "\n";
echo $a_key . " " . $group[$b_value] . "\n";
}
?>