1

正の数と負の数の組み合わせを持つ1つの配列を新しい配列に転送しようとしますが、要素が正の場合のみです。

これは私がこれまでに持っているものです:

$param = array(2, 3, 4, -2, -3, -5);

function positive_function($arr) {
    foreach ($arr as &$value) {
        if($value > 0)
            return $value;
    }
}

$modParam1 = positive_function($param);

var_dump($modParam1);

foreachステートメントに何か問題があると思います。ここで賢明なアドバイスはありますか?

4

4 に答える 4

16

試す:

$param = array(2, 3, 4, -2, -3, -5);

$positive = array_filter($param, function ($v) {
  return $v > 0;
});

print_r($positive);

http://codepad.viper-7.com/eKj7pF

于 2012-07-19T16:03:52.800 に答える
1

関数が最初の正の値を返しました。

foreachループがすべての値を実行した後、すべての正の値を保持してこの配列を返すために、新しい配列を作成する必要があります。

function positive_function($arr) {
    $result = array();

    foreach ($arr as &$value) {
        if($value > 0) {
          $result[] = value;
        }
    }

    return $result;
}

もう1つのオプションは、@Yoshiで示されているようなマッピング関数を適用することです。これは、古い配列を保持する必要があるのか​​、正でない値をすべて削除して変更するだけなのかによって異なります。

于 2012-07-19T16:03:54.777 に答える
1

探しているのは、配列のフィルターです(http://www.php.net/manual/en/function.array-filter.php

これにより、ニーズを満たさない配列内の値が削除されます。基本的な例は次のとおりです。

function is_positive($number) {
  return is_numeric($number) && $number >= 0;
}

$values = array(1, 5, -4, 2, -1);
$result = array_filter($values, 'is_positive');
print_r($result);

-関数が機能しない理由:

値を返しています。関数内では、答えが見つかったため、リターンは停止します。したがって、配列で見つかった最初の正の数を返します。

于 2012-07-19T16:10:48.400 に答える
0
$param = array(-1,2-,3,1,2,4,-1337);
function positive_function($arr)
{
    $temp = array();
    foreach ($arr as &$value) 
    {
        if($value > 0)
        {
            $temp[] = $value
        }
    }
       return $temp;
}   
于 2012-07-19T16:06:24.830 に答える