PHP:in_array, array_intersect_key, ksort

array_intersect_key()関数

array_intersect_key($比較したい配列, $比較対象の配列)
同じキーだけを持つ配列 を返す。

ksort()関数

ksort()は、キーを昇順に並べ替える。

in_array()関数

in_array(探す値, $対象の配列, bool値)は、
bool値は、true にすれば、型が合っているか確認してくれる。

$recipeNum = (int) trim(fgets(STDIN));
    $arrRecipe = [];
    $i = 0;
    while($i < $recipeNum) {
        list($recipeFood, $recipeFoodNum) = explode(' ', trim(fgets(STDIN)));
        $arrRecipe[$recipeFood] = $recipeFoodNum;
        $i++;
    }
    
    $myNum = (int) trim(fgets(STDIN));
    $arrMyRecipe = [];
    $i = 0;
    while($i < $myNum) {
        list($myFood, $myFoodNum) = explode(' ', trim(fgets(STDIN)));
        $arrMyRecipe[$myFood] = $myFoodNum;
        $i++;
    }
    
    // 2. m < n の場合、答えは、ゼロ
    $finishAll = $myNum < $recipeNum;
    // 自分が持っていない食材があれば、答えは、ゼロ
    $finishEverything = false;
    foreach ($arrMyRecipe as $food => $num) {
        $finishEverything = !(in_array($food, $arrRecipe));
    }
    if ($finishAll || $finishEverything) {
        echo 0;
        die();
    }
 
    // ksort()を使って、$arrRecipe と $arrMyRecipe のキーを昇順にする
    // 今回は、この処理は、不要。
    ksort($arrRecipe);
    ksort($arrMyRecipe);
    
    // array_intersect_key() を使って、自分の配列を共通項のみの配列に作り直す。
    function mySameFood(array $arrMyRecipe, array $arrRecipe): array
    {
        return array_intersect_key($arrMyRecipe, $arrRecipe);
    }
    $mySameFood = mySameFood($arrMyRecipe, $arrRecipe);
    
    $resultArr = [];
    // 同じキー同士の値で、x / y をする。
    foreach ($mySameFood as $food => $num) {
        $howManyDishes = $mySameFood[$food] / $arrRecipe[$food];
        $resultArr[] = floor($howManyDishes);
        // echo $howManyDishes . PHP_EOL;
    }
    
    echo min($resultArr);