如何在数组中搜索找到包含特定值的所有子阵列
问题描述:
我有一个数组放置在变量$class
由子数组构成,每个子数组包含2个学生ID,我试图找到所有的子数组,包含一定的id
例如11
我想保留所有包含这个id的数组在一个变量中。如何在数组中搜索找到包含特定值的所有子阵列
阵列示例
Array
(
[0] => Array
(
[s1] => 6
[s2] => 37
)
[1] => Array
(
[s1] => 8
[s2] => 11
)
[2] => Array
(
[s1] => 11
[s2] => 48
)
)
代码
foreach ($class as $key => $value) {
if(!in_array($id, $class)){
unset($class[$key]);
}
}
答
你
接近。如果循环并使用in_array()引用正确的变量,它将按照您的希望工作。然后匹配数组分配到一个新的数组变种以供以后使用(这样你就不会改变原来的数组!):
$id = 11;
$matched = array();
foreach ($class as $i => $students) {
if (in_array($id, $students)) {
$matched[] = $class[$i];
}
}
print_r($matched);
会导致:
Array (
[0] => Array
(
[s1] => 8
[s2] => 11
)
[1] => Array
(
[s1] => 11
[s2] => 48
)
)
+1
'$匹配[] = $学生;'也可以在上面的例子中工作。 – IncredibleHat
答
关联数组 http://php.net/manual/es/function.array-search.php
$class = array(array("s1"=>6, "s2"=>37),array("s1"=>8,"s2"=>11),array("s1"=>11, "s2"=>48));
$id = 11;
foreach ($class as $key => $value) {
if(!array_search($id, $value)){
unset($class[$key]);
}
}
对不起,您可以按照这个答复 using array_search for multi dimensional array
如果(!in_array($ id,$ class)){'to'if(!in_array($ id,$ value)){' - 另外,但这可能归结为个人偏好:我不是在循环播放时改变数组的巨大魅力。尽管在PHP中看起来通常很安全,但我已经习惯于不这么做。在这种特殊情况下,我只需将所有**匹配的**值放入一个新数组中,并保留原始未更改的值。 – ccKep
@ccK仍然得到一个空的Array() – mirvatJ
[适合我的工作?](https://3v4l.org/q29e7)你是否多次使用不同的ID做这些事情?由于您正在修改原始'$ class'数组,所以第二次搜索可能会给出意想不到的结果(例如,搜索“11”后搜索“6”将返回一个空数组,因为第一次搜索会将数组减少为仅包含'11',这两个对中都没有包含'6') – ccKep