我需要通过其一列中的键滤波一个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'])
)
);