PHP中是否有类似于Python的for i in range(length)这样的语法?

9
在Python中,我们有:
for i in range(length)

在PHP中呢?
7个回答

12

直接从文档中获取:

foreach (range(0, 12) as $number) {
    echo $number;
}

9
注意:Python的range(0, 13)range(13)与PHP的range(0,12)是等价的。 - intgr
php的range函数可以生成一个序列,从第一个数到最后一个数,可以是递增或递减的:range(5,0)将会给你5,4,3,2,1,0。而Python的range函数只能生成递增的序列,从第一个数到最后一个数。在Python中,range(5,0)将会是一个空序列! - j-a

5

传统的 for 循环:

for ($i = 0; $i < length; $i++) {
    // ...
}

或者使用 range 函数 进行 foreach 循环:

foreach (range(1, 10) as $i) {
    // ...
}

1

试试这个:

// Generates the digits in base 10.
// array(0, 1, 2, 3, 4, 5, 6, 7, 8, 9)
foreach (range(0, 9) as $number) {
    echo $number;
}

1

for ($i = 0; $i < LENGTH_GOES_HERE; $i++) { ... }

或者

foreach (range(0, LENGTH_GOES_HERE - 1) as $i) { ... },参见range()


1
foreach 行应使用 LENGTH_GOES_HERE - 1 - intgr
@intgr 我是在 low 上进行偏移。 - jensgram
@intgr 但你说得对,我明白了。我们希望$i的值与问题中的值相同 :) - jensgram

1

在 PHP 中有一个 range 函数,你可以像这样使用。

foreach( range(0,10) as $y){
    //do something
}

但与Python不同的是,您必须传递2个参数,range(10)将无法工作。


1
这是一个符合Python标准的range生成器。

foreach ($x in xrange(10)) {
  echo "$x ";
} // expect result: 0 1 2 3 4 5 6 7 8 9

function xrange($start, $limit = null, $step = null) {
    if ($limit === null) {
        $limit = $start;
        $start = 0;
    }
    $step = $step ?? 1;
    if ($start <= $limit) {
        for ($i = $start; $i < $limit; $i += $step)
            yield $i;
    } else
        if ($step < 0) 
            for ($i = $start; $i > $limit; $i += $step)
                yield $i;
}

主要参考自https://www.php.net/manual/en/language.generators.overview.php

注释

  • 它不会自动向后步进(像Python一样,不像PHP)
  • 它可以接受1、2或3个参数(像Python)
  • 它将计数到$limit - 1(像Python,不像PHP)
  • 如果您的参数很愚蠢,就不会得到结果(像Python一样)
  • 它不会在内存中存储范围(不像PHP),因此您可以拥有巨大的范围

0
<?php
// range(start, end, step=1): array
//
foreach(range(0,5) as $i) echo $i; // 012345
// but unlike python you also can range letters 
foreach(range('a','z') as $l) echo $l; //abcdefghijklmnopqrstuvwxyz
// or floating
foreach(range(0.1, 0.2, 0.01) as $f) echo "$f; "; //0.1; 0.11; 0.12; 0.13; 0.14; 0.15; 0.16; 0.17; 0.18; 0.19; 0.2;
// negative step work with letters
foreach(range('z','a',-1) as $l) echo $l; // zyxwvutsrqponmlkjihgfedcba
// and dont stuck if invalid negative step just ignore and use abs(step) value
foreach(range(1,10,-2) as $i) echo $i; // 13579
// but throw fatal if step exceed the specified range, so, test if step in range before using
foreach(range(1,10,-20) as $i) echo $i; 
// Fatal error: Uncaught ValueError: range(): Argument #3 ($step) must not exceed the specified range in /home/user/scripts/code.php:12
// Stack trace:
// #0 /home/user/scripts/code.php(12): range(1, 10, -20)
// #1 {main}
// thrown in /home/user/scripts/code.php on line 12
?>

1
目前您的答案不够清晰。请进行[编辑],添加更多细节以帮助他人理解如何回答问题。您可以在帮助中心找到有关编写良好答案的更多信息。 - Community

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接