如何在数组中搜索找到包含特定值的所有子阵列

问题描述:

我有一个数组放置在变量$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]); 
    } 
} 
+1

如果(!in_array($ id,$ class)){'to'if(!in_array($ id,$ value)){' - 另外,但这可能归结为个人偏好:我不是在循环播放时改变数组的巨大魅力。尽管在PHP中看起来通常很安全,但我已经习惯于不这么做。在这种特殊情况下,我只需将所有**匹配的**值放入一个新数组中,并保留原始未更改的值。 – ccKep

+0

@ccK仍然得到一个空的Array() – mirvatJ

+1

[适合我的工作?](https://3v4l.org/q29e7)你是否多次使用不同的ID做这些事情?由于您正在修改原始'$ class'数组,所以第二次搜索可能会给出意想不到的结果(例如,搜索“11”后搜索“6”将返回一个空数组,因为第一次搜索会将数组减少为仅包含'11',这两个对中都没有包含'6') – ccKep

接近。如果循环并使用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

+3

您没有安全地使用'array_search',请阅读返回值的大红色警告。 – ccKep

+0

你是对的 https://*.com/questions/12376992/search-associative-array-by-value – Walter