2014-02-24 31 views
0
array( 
    [n] => array(

     [mother] => 'some_name', 
     [children] => [n] => array(
           ['child_name']=>'some_name' 
           ... 
          ) 

     ) 
    ) 

我想用array_filter()过滤这个数组。为了过滤该数组以获得只有母亲被命名为“Jane”的“记录”,例如我做了以下工作,就像魅力一样。PHP array_filter - 如何在回调函数中使用多个键array_filter数组?

array_filter($myarray, function ($k) { 
    return $k['mother'] == 'Jane'; 
}); 

现在我想过滤$ myarray来获取儿童被命名为“Peter”的“记录”。我尝试了以下不工作。

array_filter($myarray, function ($k) { 
    return $k['children']$k['child_name'] == 'Peter'; 
}); 

我也试过下面哪个也不行。

array_filter($myarray, function ($k1,$k2) { 
    return $k1['children']$k2['child_name'] == 'Peter'; 
}); 
+0

'阵列([CHILD_NAME] => ...)'是无效的语法。阵列实际上是什么样的? – deceze

+0

它是'print_r()'输出我猜 –

+0

我redited myarray,所以你可以更好地看到它是如何组成的... – Marc

回答

3

您有阵列滤波器回调函数内的错误:

$myarray = array(
    array(
     'mother' => 'Jane', 
     'children' => array(
      array('child_name' => 'Peter'), 
      array('child_name' => 'Peter2') 
     ) 
    ), 

    array(
     'mother' => 'Jane1', 
     'children' => array(
      array('child_name' => 'Peter1'), 
     ) 
    ) 
); 

//The filtering 
$myarray = array_filter($myarray, function ($k) { 

    //Loop through childs 
    foreach ($k['children'] AS $child) 
    { 
     //Check if there is at least one child with the required name 
     if ($child['child_name'] === 'Peter') 
      return true; 
    } 

    return false; 
}); 

print_r($myarray); 
+0

你好。已经尝试不工作,因为[children]是一个数组。通常是多个孩子。所以问题是如何在回调函数中使用多个键? – Marc

+0

给我一些时间来测试我的真实代码... – Marc

+0

感谢,让我走上正确的轨道:) – Marc