PHP:連想配列のキーを差し替える、array_keys() で キー だけとりだす。

  • 連想配列のキーを、1行目と2行目の変数に置き換える。

  • foreach:ループの中で配列の要素を直接変更したい場合は、 $value の前に & をつけます。

  • array_keys()関数で、連想配列の「キー」のみ取り出す

/*
1.連想配列を作って、値が、小さい方のキーが勝者となり、次の配列に格納する。$smaller = [];
2. 同じことをやって、キーを出力する。=> array_keys();

連想配列のキーを、1行目と2行目の変数に置き換える。
index番号とのずれで、最後に、キーに +1 をしたのを出力すればよい

sort を使って、2回戦の参加者を昇順に綺麗に並べ直す。
*/

    list($a, $b) = explode(' ', trim(fgets(STDIN))); // 1回戦の対戦相手
    list($c, $d) = explode(' ', trim(fgets(STDIN))); // 1回戦の対戦相手
    
    $score = [];
    $score = explode(' ', trim(fgets(STDIN))); // 1回戦のスコア

    list($x, $y) = explode(' ', trim(fgets(STDIN))); // 2回戦の2人のスコア
    
    $smaller = [];
    // 連想配列のキーを変数、$a~$dに差し替える。
    // index番号とのずれで、それぞれ、-1 をする。
    if($score[$a-1] < $score[$b-1]) {
        $smaller[$a-1] = $score[$a-1];
    } else {
        $smaller[$b-1] = $score[$b-1];
    }
    
    if($score[$c-1] < $score[$d-1]) {
        $smaller[$c-1] = $score[$c-1];
    } else {
        $smaller[$d-1] = $score[$d-1];
    }
    
    // 連想配列のキーだけ、取り出す
    $arrKeys = array_keys($smaller);
    // index 番号の関係で +1 する
    foreach ($arrKeys as &$v) {
        $v++;
    }
    // 昇順にすることで、扱いを楽にする。
    sort($arrKeys);
    
    if ($arrKeys[0] < $arrKeys[1] && $x < $y) {
        echo $arrKeys[0] . PHP_EOL;
        echo $arrKeys[1] . PHP_EOL;
    } else {
        echo $arrKeys[1] . PHP_EOL;
        echo $arrKeys[0] . PHP_EOL;
    }