我有一些看起来像这样的代码(我简化了它):
function process_something($a){
foreach($a as $b){
// Some logic here
return $something;
}
}
$input=[]; // An array of some kind
echo process_something($input);
我希望最后一行能够回显循环返回的内容,但我什么都没得到。也许上面的代码不起作用。我只是把它放在插图中。我有很多嵌套循环一起工作以返回各种东西。
如果我有循环回送数据,它可以工作。但是,我需要此函数才能将最终结果返回给我进行进一步处理,而不是回显给用户。
我该如何处理?
答案 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
答案 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));