在php中过滤数组,同时具有与值和键相关的条件

时间:2011-05-23 14:56:53

标签: php array-filter

我正在尝试过滤一个数组,其中过滤函数应该检查多个条件。例如,如果元素x以大写字母开头,则过滤函数应返回true。除非,如果元素x之前的元素满足某些其他条件,那么元素x应该保留在数组中,因此过滤函数应该返回false。

问题是array_filter中的回调函数只传递元素的值而不是它的键...使用array_search做一些魔法可能会有效,但我只是想知道我是否在寻找这个特定问题的错误位置?

3 个答案:

答案 0 :(得分:1)

$newArray=array();
foreach($oldArray as $key=>$value){
   if(stuff){
      $newArray[$key]=$value;
   }
}

foreach($array as $key=>$value){
   if(stuff){
      unset($array[$key]);
   }
}

答案 1 :(得分:1)

听起来好像是一个好的旧foreach循环:

foreach ($arr as $k => $v) {
  // filter
  if (!$valid)
    unset($arr[$k]);
}

答案 2 :(得分:1)

你使用简单的foreach吗?

$prev;
$first = true;
$result = array();
foreach ($array as $key => $value)
{
    if ($first)
    {
        $first = false;

        // Check first letter. If successful, add it to $result

        $prev = $value;
        continue; // with this we are ignoring the code below and starting next loop.
    }

    // check $prev's first letter. if successful, use continue; to start next loop.
    // the below code will be ignored.

    // check first letter... if successful, add it to $result
}