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

时间:2019-03-03 05:38:08

标签: php arrays multidimensional-array

我有两个数组,其中Array1键在Array2中是[teacher_id]:

body {
  margin: 0; /* remove the default browser margin */
}
.wrapper {
  display: grid;
  grid-template-columns: 1fr 60px; /* set the columns */
  grid-template-rows: 60px 1fr; /* set the rows */
  height: 100vh; /* set the height of the layout */
}

/* presentation styles */
.wrapper>*{border:1px solid}.header{background:#00f}.logo{background:orange}.content{background:#f0f8ff}.aside{background:grey}

我需要从Array2中排除这部分:

<div class="wrapper">
  <div class="header"></div>
  <div class="logo"></div>
  <div class="content"></div>
  <div class="aside"></div>
</div>

条件是array1中的值37 <值40。

我尝试了array_filter,但我不知道如何为此编写适当的函数。 谢谢。

3 个答案:

答案 0 :(得分:1)

$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
        )

)

Sandbox

请注意use ($array1),但此后您打算如何处理仍是个谜。

我不确定是否

  

我需要从Array2中排除这部分:

表示仅保留该内容或仅删除该内容。您的问题非常模棱两可,我不知道这个I need to exclude this part from Array2 .. on condition that in array1 value 37 < value 40.是什么意思

让我重新措辞。

$array2 [某物]值$array1小于[某物]值37的情况下,您需要从40中排除一些比特。

我想这意味着

 I have two arrays where Array1 keys are [teacher_id] in Array2:

20 => 37(来自$array1)与'teacher_id' => 20(来自$array2)一起

但是我该如何on condition that in array1 value 37 < value 40呢?这些值都不来自$array2

答案 1 :(得分:1)

尝试一下:

$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);
});

答案 2 :(得分:1)

如果您要删除与第二个数组有关的第一个元素,则可以根据与第一个数组有关的条件array_shift()将其关闭,如下所示:

<?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);
}

查看实时代码here

函数array_values()有助于处理关联数组中的值。或者,您可以unset {arr2中的第一个元素;参见this example。同样,当满足条件时,您可以采取数组的slice来有效地删除第一个元素;参见here。如果仍然确定要使用array_filter(),请参阅此example