PHP 相当于 Python 的 enumerate() 吗?

发布于 2024-09-15 12:02:12 字数 236 浏览 4 评论 0原文

在Python中我可以写:

for i, val in enumerate(lst):
    print i, val

我知道如何在PHP中做到这一点的唯一方法是:

for($i = 0; $i < count(lst); $i++){
    echo "$i $val\n";
}

PHP中有更干净的方法吗?

In Python I can write:

for i, val in enumerate(lst):
    print i, val

The only way I know how to do this in PHP is:

for($i = 0; $i < count(lst); $i++){
    echo "$i $val\n";
}

Is there a cleaner way in PHP?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(8

冷月断魂刀 2024-09-22 12:02:13

是的,您可以使用 PHP 的 foreach 循环:

 foreach($lst as $i => $val)
       echo $i.$val;

Yes, you can use foreach loop of PHP:

 foreach($lst as $i => $val)
       echo $i.$val;
晨敛清荷 2024-09-22 12:02:13

我认为您正在寻找 range 函数。

一个用例可能是分页,其中(假设)您有 150 个项目,并且您希望每页显示 10 个项目,因此您有 15 个链接。因此,要创建这些链接,您可以使用:

    $curpage=3;$links=15;$perpage=10; //assuming.

    <?php foreach(range(1,$links) as $i):?>
        <?php if($i==$curpage):?>
             <li class="active"><a class="active"><?=$i?></a><li>
        <?php else:?>
             <li><a href="paging_url"><?=$i?></a><li>
        <?php endif ?>
    <?php endforeach ?>

I think you were looking for the range function.

One use case could be the pagination where (assume) you have 150 items and you want to show 10 items per page so you have 15 links. So to create those links you can use:

    $curpage=3;$links=15;$perpage=10; //assuming.

    <?php foreach(range(1,$links) as $i):?>
        <?php if($i==$curpage):?>
             <li class="active"><a class="active"><?=$i?></a><li>
        <?php else:?>
             <li><a href="paging_url"><?=$i?></a><li>
        <?php endif ?>
    <?php endforeach ?>
生死何惧 2024-09-22 12:02:13

随着 PHP 5.3 中闭包的引入,您还可以编写以下内容:

array_map(function($i,$e) { /* */ }, range(0, count($lst)-1), $lst);

当然,这仅在数组存储在变量中时才有效。

With the introduction of closures in PHP 5.3 you can also write the following:

array_map(function($i,$e) { /* */ }, range(0, count($lst)-1), $lst);

Of course this only works if the array is stored in a variable.

时光礼记 2024-09-22 12:02:13

我正在使用辅助函数:

function enumerate(array &$array, callable $fn) {
    $i = 0;
    foreach ($array as $key => &$value)
        $fn($i++, $key, $value);
}

我按如下方式使用它:

enumerate($array, function ($i, $key, &$value) use (&$something)  {
    ...
});

缺点可能是您必须通过 use (...) 指令传递要在循环内使用的外部变量。

I am using the helper function:

function enumerate(array &$array, callable $fn) {
    $i = 0;
    foreach ($array as $key => &$value)
        $fn($i++, $key, $value);
}

And I use it as follows:

enumerate($array, function ($i, $key, &$value) use (&$something)  {
    ...
});

The downside may be that you have to pass external variables that you want to use inside the loop through the use (...) directive.

゛清羽墨安 2024-09-22 12:02:12

不要相信 PHP 数组,它们就像 Python 字典。如果您想要安全的代码,请考虑以下内容:

<?php
$lst = array('a', 'b', 'c');

// Removed a value to prove that keys are preserved
unset($lst[1]);

// So this wont work
foreach ($lst as $i => $val) {
        echo "$i $val \n";
}

echo "\n";

// Use array_values to reset the keys instead
foreach (array_values($lst) as $i => $val) {
        echo "$i $val \n";
}
?>

-

0 a 
2 c 

0 a 
1 c 

Don't trust PHP arrays, they are like Python dicts. If you want safe code consider this:

<?php
$lst = array('a', 'b', 'c');

// Removed a value to prove that keys are preserved
unset($lst[1]);

// So this wont work
foreach ($lst as $i => $val) {
        echo "$i $val \n";
}

echo "\n";

// Use array_values to reset the keys instead
foreach (array_values($lst) as $i => $val) {
        echo "$i $val \n";
}
?>

-

0 a 
2 c 

0 a 
1 c 
§对你不离不弃 2024-09-22 12:02:12

使用 foreach

foreach ($lst as $i => $val) {
    echo $i, $val;
}

Use foreach:

foreach ($lst as $i => $val) {
    echo $i, $val;
}
落花随流水 2024-09-22 12:02:12

在Python中,枚举有start参数,用于定义枚举的起始值。

我在 php 中的解决方案是:

function enumerate(array $array, $start = 0)
{
    $end = count($array) -1 + $start;

    return array_combine(range($start, $end), $array);
}

var_dump(enumerate(['a', 'b', 'c'], 6000));

输出是:

array(3) {
  [6000]=>
  string(1) "a"
  [6001]=>
  string(1) "b"
  [6002]=>
  string(1) "c"
}

In python enumerate has start argument, to define start value of enumeration.

My solution for this in php is:

function enumerate(array $array, $start = 0)
{
    $end = count($array) -1 + $start;

    return array_combine(range($start, $end), $array);
}

var_dump(enumerate(['a', 'b', 'c'], 6000));

The output is:

array(3) {
  [6000]=>
  string(1) "a"
  [6001]=>
  string(1) "b"
  [6002]=>
  string(1) "c"
}
橘香 2024-09-22 12:02:12

如果您想要索引、键和值,相当于此 Python:

for ii, (key, value) in enumerate(my_dict.items()):
    print ii
    print key
    print value

您可以在 PHP 中创建一个枚举函数来包装您的对象。它并不意味着高效(它预先迭代并收集所有内容),但它在语法上可能很方便。

function enumerate($array) {
    class IterObject {
        public $index;
        public $key;
        public $value;
    }

    $collect = array();
    $ii = 0;
    foreach ($array as $key => $value) {
        $iter = new IterObject();
        $iter->index = $ii;
        $iter->key = $key;
        $iter->value = $value;
        array_push($collect, $iter);
        $ii++;
    }
    return $collect;
}

用法示例:

foreach (enumerate($my_array) as $iter) {
    echo $iter->index;
    echo $iter->key;
    echo $iter->value;
}

If you want the index, key, and value, equivalent to this Python:

for ii, (key, value) in enumerate(my_dict.items()):
    print ii
    print key
    print value

You can create an enumerate function in PHP that wraps your objects. It's not meant to be efficient (it pre-iterates and collects everything) but it can be syntactically convenient.

function enumerate($array) {
    class IterObject {
        public $index;
        public $key;
        public $value;
    }

    $collect = array();
    $ii = 0;
    foreach ($array as $key => $value) {
        $iter = new IterObject();
        $iter->index = $ii;
        $iter->key = $key;
        $iter->value = $value;
        array_push($collect, $iter);
        $ii++;
    }
    return $collect;
}

Example usage:

foreach (enumerate($my_array) as $iter) {
    echo $iter->index;
    echo $iter->key;
    echo $iter->value;
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文