返回foreach循环的结果

时间:2016-10-27 13:05:55

标签: php foreach return

我有一些看起来像这样的代码(我简化了它):

function process_something($a){
    foreach($a as $b){
        // Some logic here
        return $something;
    }
}
$input=[]; // An array of some kind
echo process_something($input);

我希望最后一行能够回显循环返回的内容,但我什么都没得到。也许上面的代码不起作用。我只是把它放在插图中。我有很多嵌套循环一起工作以返回各种东西。

如果我有循环回送数据,它可以工作。但是,我需要此函数才能将最终结果返回给我进行进一步处理,而不是回显给用户。

我该如何处理?

4 个答案:

答案 0 :(得分:1)

在这种情况下,此循环只会运行一次,因为return会在第一次出现时跳出函数。

应该更像是:

function process_something($a){
    foreach($a as $b){
        $something = 'Some math or other logic here';
    }
    return $something;
}
$input=[]; // An array of some kind
echo process_something($input);

请发布您的代码,我们会尝试找出问题所在。

答案 1 :(得分:1)

这是generator的完美案例,这是我很少见到的概念。

  function process_something($a){
    foreach($a as $b){
      // Some logic here
      yield $something;
    }
  }

  $input=[]; // An array of some kind

  /**
   * The generator returns an Iterator instance
   * so you'd need to loop over it
   */
  foreach(process_something($input) as $item){
    // do stuff here
    // echo $item
    // echo $item->something
    // your call
  }

这里的主要优点是你可以“在没有实际返回的情况下返回”,你正在产生一个值,并且生成器继续它的工作。

更不用说它的内存效率非常高,99%的时候内存不是问题。

AND,这是一个不错的部分,您可以为$input中的每个项目应用特定逻辑,而无需执行一些奇怪的hack-ish函数。

替代

  function process_something($a){
    $return = [];

    foreach($a as $b){
      // Some logic here
      $return[] = $something;
    }

    return $return;
  }

这个答案不是评论的唯一原因是,我很少看到一个可以合理地从发电机中受益的问题。这是其中之一。

有关发电机的更多信息:

http://blog.ircmaxell.com/2012/07/what-generators-can-do-for-you.html

https://scotch.io/tutorials/understanding-php-generators

答案 2 :(得分:0)

我确实帮到你。但我认为你正在寻找数组的最后一个值。 要做到这一点:

function process_something($a){
   $b = array_reverse ($a);
   return $b[0];
}

答案 3 :(得分:0)

GTWIWTG> (for x *
           (print x)
           (when (= x 7)
             (return)))

0 
1 
2 
3 
4 
5 
6 
7 
T

结果:

class StrHelper
{
    /**
     * Check for $string starts with $query
     * @param $string
     * @param $query
     * @return bool
     */
    public static function startsWith($string,$query){
        return substr($string, 0, strlen($query)) === $query;
    }
}

class ModelSearchHelper
{
    /**
     * filter  where $key of $data arr startsWith $modelName
     * @param string $modelName
     * @param array $data
     * @return array
     */
    public static function searchFor(string $modelName,array $data){
// this code do same
//        $out=[];
//        foreach ($data as $key=>$value){
//          if(StrHelper::startsWith($key,$modelName)){
//                $out[$key]=$value;
//            }
//        }
//        return $out;
// of this
        return array_filter($data,function ($value,$key) use ($modelName){
            return StrHelper::startsWith($key,$modelName);
        },ARRAY_FILTER_USE_BOTH );
    }
}

$test=[
    'limit'=>10,
    'offset'=>5,
    'customer.name'=>'Fox',
    'customer.address.street'=>'forest st.'
];


//filter where $key of $model startsWith $modelName
var_dump(ModelSearchHelper::searchFor('customer',$test));