我需要用子数组的值过滤多维数组,子数组的值每次可能都在不同的位置。
以下数组
array(3) {
[147]=>
array(2) {
[0]=>
int(4)
[1]=>
string(3) "req"
}
[199]=>
array(2) {
[0]=>
int(5)
[1]=>
string(3) "opt"
}
[212]=>
array(3) {
[0]=>
int(2)
[1]=>
int(5)
[2]=>
string(3) "req"
}
需要分成这些数组。
数组1:
array(2) {
[147]=>
array(2) {
[0]=>
int(4)
[1]=>
string(3) "req"
}
[212]=>
array(3) {
[0]=>
int(2)
[1]=>
int(5)
[2]=>
string(3) "req"
}
数组2:
array(1) {
[199]=>
array(2) {
[0]=>
int(5)
[1]=>
string(3) "opt"
}
我知道array_filter(),但无法弄清楚array_filter()内部的函数,该函数可以为我提供所需的结果。
我尝试过
$req = array_filter($my_array, function ($v, $k) {
return $v == 'req';
}, ARRAY_FILTER_USE_BOTH);
我也尝试过
function filter_my_array($my_array, $search_term) {
$new_array = array();
foreach ($my_array as $subarray) {
if (in_array($search_term, $subarray)) {
$new_array[] = $subarray;
}
}
return $new_array;
}
$req = filter_my_array($array, 'req');
两种方法都不起作用。
答案 0 :(得分:2)
您可以通过按必要的值进行过滤来创建两个数组。您可以对其使用array_filter函数,但是您应该在传递给array_filter函数的每个元素中找到一个必要的值。
例如,找到“ req”值
<?xml version="1.0" encoding="utf-8"?>
<!--
~ // Copyright 2018 Vorlonsoft LLC
~ //
~ // Licensed under The MIT License (MIT)
-->
<resources>
<!-- Base Apple and Modern types Rate Dialog theme. -->
<style name="RateDialogTransparentTheme">
<item name="android:background">@color/rateDialogColorTransparent</item>
<item name="android:backgroundDimEnabled">true</item>
<item name="android:backgroundDimAmount">0.4</item>
<item name="android:colorBackgroundCacheHint">@null</item>
<item name="android:windowBackground">@color/rateDialogColorTransparent</item>
<item name="android:windowContentOverlay">@null</item>
<item name="android:windowFrame">@null</item>
<item name="android:windowIsFloating">true</item>
<item name="android:windowIsTranslucent">true</item>
<item name="android:windowNoTitle">true</item>
<item name="android:windowTitleStyle">@null</item>
</style>
</resources>
例如,找到“ opt”值
$req = array_filter($my_array, function ($v) {
return in_array('req', $v);
});
我使用in_array函数来查找值,因为每个元素都是具有不同数量元素的数组
答案 1 :(得分:0)
这似乎对我有用:
function filter_my_array($my_array, $search_term) {
$required_array = [];
$filtered_array = [];
foreach ($my_array as $key => $subarray) {
$found_flag = false;
foreach ($subarray as $cur_subarray) {
if ($cur_subarray == $search_term) {
$found_flag = true;
break;
}
}
if ($found_flag == true) {
$required_array[$key] = $subarray;
} else {
$filtered_array[$key] = $subarray;
}
}
return [$required_array, $filtered_array];
}
要检索所需的数组和过滤后的数组,请按以下方式调用函数:
list($required_array, $filtered_array) = filter_my_array($my_array, 'req');
其中$ my_array用于保存示例中的数组。