3D阵列的滤波行,其中特定列中的键满足平坦的白色阵列



我需要通过其一列中的键滤波一个3维数组。我希望保留包含声明的白名单数组中所有必需键的行。

样本数据:

[
    [
        'name' => 'Фізика',
        'disciplines' => [
            1 => 'Українська мова та література',
            4 => 'Математика',
            5 => 'Фізика',
            6 => 'Біологія',
        ],
        'priority' => [
            1 => 0,
            4 => 1,
            5 => 2,
            6 => 2,
        ]
    ],
    [
        'name' => 'Інформатика',
        'disciplines' => [
            1 => 'Українська мова та література',
            2 => 'Історія України',
            4 => 'Математика',
            12 => 'Іноземна мова',
        ],
        'priority' => [
            1 => 0,
            2 => 2,
            4 => 1,
            12 => 2,
        ]
    ],
    [
        'name' => 'Початкова освіта',
        'disciplines' => [
            1 => 'Українська мова та література',
            2 => 'Історія України',
        ],
        'priority' => [
            1 => 0,
            2 => 2,
        ]
    ],
]

我想将行放在他们的纪律阵列中包含我平坦数组中所有值的键:

[2, 4, 12]

in_array()对我不起作用。如何使用此必需密钥数组过滤此数组结构?从我的示例数据中,仅保留第二行。

较大数组的var_dump()

  • 准备您的白名单,以使所需的值是平面阵列的钥匙。
  • 调用array_filter()迭代样品数组的每一行。
  • 尝试使用该行的学科键从白名单数组中消除尽可能多的元素。如果没有剩下的话,则该行满足白名单并应保留。

代码:(演示)

$get['disciplines'] = ['second' => 2, 'third' => 4, 'fourth' => 12];
$filterBy = array_flip($get['disciplines']);
var_export(
    array_filter(
        $array,
        fn($row) => !array_diff_key($filterBy, $row['disciplines'])
    )
);

最新更新