我有两个数组,其中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,但我不知道如何为此编写适当的函数。 谢谢。
答案 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
)
)
请注意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。