Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何在另一个数组中给定的条件下从多维数组中排除值_Php_Arrays_Multidimensional Array - Fatal编程技术网

Php 如何在另一个数组中给定的条件下从多维数组中排除值

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键是Array2中的[teacher_id]:

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项等,该怎么办?您如何知道要比较什么。