Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/268.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在一定条件下对回路进行换向_Php_Arrays_Loops - Fatal编程技术网

Php 在一定条件下对回路进行换向

Php 在一定条件下对回路进行换向,php,arrays,loops,Php,Arrays,Loops,通常,我希望从下至上处理我的列表: for ($dp = sizeof($products) - 1; $dp >= 0; $dp--) { 但有时我想自上而下: for ($dp = 0; $dp < sizeof($products); $dp++) { 有没有办法用一行代码来表达这一点 自己定义一个函数,该函数在所需方向上产生值: for ($dp = 0; $dp < sizeof($array); $dp++) { $item = $array[$reve

通常,我希望从下至上处理我的列表:

for ($dp = sizeof($products) - 1; $dp >= 0; $dp--) {
但有时我想自上而下:

for ($dp = 0; $dp < sizeof($products); $dp++) {

有没有办法用一行代码来表达这一点

自己定义一个函数,该函数在所需方向上产生值:

for ($dp = 0; $dp < sizeof($array); $dp++) {
    $item = $array[$reversed ? sizeof($array) - $dp - 1 : $dp];
}
function iterate($iterable, $forward = true) {
    $init = $forward ? 'reset' : 'end';
    $next = $forward ? 'next'  : 'prev';
    for ($init($iterable); ($key=key($iterable))!==null; $next($iterable)){
        yield $key => current($iterable);
    }
}
然后使用它:

$array = [ 'q', 'l', 'z' ];

// forward...
foreach (iterate($array) as $key => $value) {
    echo "$key => $value" . PHP_EOL;
}

// now backward...       VVVVV
foreach (iterate($array, false) as $key => $value) {
    echo "$key => $value" . PHP_EOL;
}
这种方法将您与索引杂耍相关的错误隔离开来


定义一个按所需方向生成值的函数:

function iterate($iterable, $forward = true) {
    $init = $forward ? 'reset' : 'end';
    $next = $forward ? 'next'  : 'prev';
    for ($init($iterable); ($key=key($iterable))!==null; $next($iterable)){
        yield $key => current($iterable);
    }
}
然后使用它:

$array = [ 'q', 'l', 'z' ];

// forward...
foreach (iterate($array) as $key => $value) {
    echo "$key => $value" . PHP_EOL;
}

// now backward...       VVVVV
foreach (iterate($array, false) as $key => $value) {
    echo "$key => $value" . PHP_EOL;
}
这种方法将您与索引杂耍相关的错误隔离开来


您可能可以使用array\u reverse。像foreach$这样的东西?array_reverse$products:$products作为$product您可以在循环之前初始化$dp,并执行类似于for的操作$反向$dp<…:$dp>=0$dp+=$反向?1:-1…虽然这不太容易理解。也许你更愿意把循环体放到一个函数中,然后做两个不同的循环来调用这个函数。你可能可以使用array_reverse。像foreach$这样的东西?array_reverse$products:$products作为$product您可以在循环之前初始化$dp,并执行类似于for的操作$反向$dp<…:$dp>=0$dp+=$反向?1:-1…虽然这不太容易理解。也许更愿意将循环体放入一个函数中,并执行两个不同的循环来调用该函数。这个想法很有趣,但我需要数组块中的$dp作为索引。不过,使用您的方法,我可以计算索引并将其放入一个新变量中。这是一个有趣的想法,但我需要数组块中的$dp作为索引。不过,使用你的方法,我可以计算指数并将其放入一个新变量中。聪明的解决方案。聪明的解决方案。