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

匿名関数(後者はPHP 5.3以降を使用array_filterしている場合のみ)を使用できますが、より多くのコードで示した方法の方が効率的で、私には見栄えがします。

$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の強みの1つです。たとえば、配列の処理に役立つ関数がいくつかあります。

$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 に答える