3

我需要将一些 Python 代码重写为 PHP(不要恨我,客户要求我这样做)

在 Python 中,您可以执行以下操作:

// Python
numbers = [34.6, -203.4, 44.9, 68.3, -12.2, 44.6, 12.7]
positive = [int(n) for n in numbers if n > 0]
negative = [int(n) for n in numbers if n < 0]

但是如果你在 PHP 中尝试这样的事情,它就不起作用了:

// PHP
$numbers = array(34.6, -203.4, 44.9, 68.3, -12.2, 44.6, 12.7);
$positive = array(intval($n) for $n in $numbers if $n > 0);
$negative = array(intval($n) for $n in $numbers if $n > 0);

而不是做类似的事情:

<?php
$numbers = array(34.6, -203.4, 44.9, 68.3, -12.2, 44.6, 12.7);

$positive = array();
$negative = array();

foreach($numbers as $n) {

    if($n > 0):
        $positive[] = intval($n);
    else:
        $negative[] = intval($n);
    endif;
}
?>

有没有办法像在 Python 中那样用更少的代码来编写它?

4

4 回答 4

5

您可以使用array_filter匿名函数(仅当您拥有 PHP 5.3 或更高版本时才使用后者),但您使用更多代码显示的方式更高效,对我来说看起来更整洁。

$positive = array_filter($numbers, function($x) { return $x > 0; });
$negative = array_filter($numbers, function($x) { return $x < 0; });

array_map申请intval

$positive = array_map('intval', array_filter($numbers, function($x) { return $x > 0; }));
$negative = array_map('intval', array_filter($numbers, function($x) { return $x < 0; }));
于 2012-06-20T19:34:38.817 回答
3

当然。采用array_filter

$positive = array_filter($numbers,function($a) {return $a > 0;});
$negative = array_filter($numbers,function($a) {return $a < 0;});
于 2012-06-20T19:34:27.033 回答
2

PHP 在数组/映射处理方面有点冗长,这是 Python 的强项之一。有一些函数可以帮助处理数组,例如:

$positive = array_filter($numbers,function($n){return $n > 0;});
$positive = array_map('intval',$positive);
$negative = array_filter($numbers,function($n){return $n < 0;});
$negative = array_map('intval',$positive);
于 2012-06-20T19:33:57.303 回答
-2

不...据我所知, foreach 循环是唯一的方法。

这不是更多的代码。

但是如果你想让它更短一点,你可以在 foreach 循环之前去掉显式的数组声明。

于 2012-06-20T19:33:56.877 回答