Php 如何在另一个数组中给定的条件下从多维数组中排除值
我有两个数组,其中Array1键是Array2中的[teacher_id]:Php 如何在另一个数组中给定的条件下从多维数组中排除值,php,arrays,multidimensional-array,Php,Arrays,Multidimensional Array,我有两个数组,其中Array1键是Array2中的[teacher_id]: Array1 ( [20] => 37 [44] => 40 ) Array2 ( [0] => Array ( [teacher_id] => 44 [course_id] => 1180 [student_id] => 1662 ) [1] => Ar
Array1 ( [20] => 37 [44] => 40 )
Array2
(
[0] => Array
(
[teacher_id] => 44
[course_id] => 1180
[student_id] => 1662
)
[1] => Array
(
[teacher_id] => 20
[course_id] => 1180
[student_id] => 1662
)
[2] => Array
(
[teacher_id] => 44
[course_id] => 1180
[student_id] => 1705
)
)
我需要将此部分从Array2中排除:
[0] => Array
(
[teacher_id] => 44
[course_id] => 1180
[student_id] => 1662
)
如果阵列1中的值37小于值40
我尝试了数组过滤器,但我不知道如何为它编写合适的函数。
谢谢。像这样
$array1 = array ( '20' => 37, '44' => 40 );
$array2 = array (
0 =>
array (
'teacher_id' => 44,
'course_id' => 1180,
'student_id' => 1662
),
1 =>
array (
'teacher_id' => 20,
'course_id' => 1180,
'student_id' => 1662
),
2 =>
array (
'teacher_id' => 44,
'course_id' => 1180,
'student_id' => 1705
)
);
$array = array_filter($array2, function($item) use ($array1){
$key = $item['teacher_id'];
if(!isset($array1[$key])) return true; //always keep these
return $item['teacher_id'] > $array1[$key];
});
print_r($array);
输出
Array
(
[0] => Array
(
[teacher_id] => 44
[course_id] => 1180
[student_id] => 1662
)
[2] => Array
(
[teacher_id] => 44
[course_id] => 1180
[student_id] => 1705
)
)
请注意使用($array1)
,但之后您打算如何使用它是一个谜
我不确定这是不是真的
我需要将此部分从Array2中排除:
[0] => Array
(
[teacher_id] => 44
[course_id] => 1180
[student_id] => 1662
)
意思是只保留那个或只删除那个。你的问题很模糊,我不知道这是什么,我需要从Array2中排除这个部分。。在数组1中,值37<值40.
表示
让我再说一遍
如果$array1
[something]值37
小于[something]值40
,则需要从$array2
中排除一些位
我猜这意味着
I have two arrays where Array1 keys are [teacher_id] in Array2:
20=>37
(from$array1
)与'teacher\u id'=>20
(from$array2
)
但是如果数组中的值为37<40,我该怎么做呢?这两个值都不是来自
$array2
请尝试以下操作:
$array1 = array('20' => 37, '44' => 40);
$array2 = array(array
(
'teacher_id' => 44,
'course_id' => 1180,
'student_id' => 1662
),
array
(
'teacher_id' => 20,
'course_id' => 1180,
'student_id' => 1662
),
array
(
'teacher_id' => 44,
'course_id' => 1180,
'student_id' => 1705
));
$final_array = array_filter($array2, function($item) use ($array1) {
return $array1[$item['teacher_id']] != max($array1);
});
如果要删除第一个元素(第二个数组的数组),根据第一个数组的条件,可以按如下方式将其关闭:
<?php
$arr1 = [20 => 37, 44 => 40];
$arr2 = [0 => [
"teacher_id" => 44,
"course_id" => 1180,
"student_id" => 1662],
1 => [
"teacher_id" => 20,
"course_id" => 1180,
"student_id" => 1662
],
2 => [
"teacher_id" => 44,
"course_id" => 1180,
"student_id" => 1705
]];
/*
remove first element in $arr2 so that teacher_ids commence with first key in first array
provided its value is less than the next one in $arr1
*/
$arrvalues = array_values( $arr1 );
$i=0;
if ( $arrvalues[$i] < $arrvalues[$i+1] ) {
array_shift( $arr2 );
var_dump($arr2);
}
第一个数组的值是什么?条件是在array1 value 37
这到底是什么意思?在获取数据时,您应该在Sql查询中这样做。这是什么丑陋的东西$GLOBALS['array1']
为什么不使用use
这是正确的最佳实践方法来传递它呢。更不用说你从来没有设置过它,所以它是未定义的索引。我的目标是从array2中删除子数组0。基于:'course_id'和'student_id'等于子数组1,但'teacher_id'导致array1,array1显示id=44的教师(以及整个子数组0)必须删除,因为这仍然没有意义。在某种程度上,我无法将其转换为我头脑中需要在代码中执行的指令。“课程id”和“学生id”如何等于子阵列1
如果需要删除第5项等,该怎么办?您如何知道要比较什么。