使用PHP中的列表

时间:2012-06-20 19:31:42

标签: php python arrays

我需要将一些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 个答案:

答案 0 :(得分: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; }));

答案 1 :(得分:3)

不确定。使用array_filter

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

答案 2 :(得分: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);

答案 3 :(得分:-2)

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

这不是更多的代码。

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