1

簡単な質問ですが、数値を除算するときにすべてのオプションを取得するにはどうすればよいですか?例えば:

  • 24 by 6戻り値6, 12, 18, 24
  • 24 by 4戻り値4, 8, 12, 16, 20, 24
  • 24 by 5戻り値false

データベースに番号(例:2)とカウンター(例:14)があります。つまり、カウンターが2番目の番号に達するたびに、イベントを発生させたいということです。したがって、解決策2、4、6などがあり、カウンターが解決策の1つと等しい場合、イベントを発生させることができると思いました。

4

7 に答える 7

7

作るのはかなり簡単です。

<?php

/**
 * @param int $number  The beginning number
 * @param int $divider The number dividing by
 *
 * @return array
 * @throws Exception   In case $number is not divisible by $divider
 */
function get_number_sequence($number, $divider) {
    //In case $number is not divisible by $divider, throw an Exception.
    if ($number % $divider !== 0) {
        throw new Exception("$number is not divisible by $divider");
    }
    //Return an array from $divider to $number in steps of $divider.
    $result = range($divider, $number, $divider);
    return $result;
}

/*
 * Testing begins
 */

try {
    echo "<pre>";
    echo implode(", ", get_number_sequence(24, 4)) . PHP_EOL;
    echo implode(", ", get_number_sequence(24, 6)) . PHP_EOL;
    echo implode(", ", get_number_sequence(24, 5)) . PHP_EOL;
    echo "</pre>";
}
catch (Exception $e) {
    echo "Invalid: " . $e->getMessage();
}

いくつかのポイント

  • 何か例外が発生した場合でもfalseを返さないでくださいException。例に示すように、を使用してください。
  • 剰余演算子を使用して、数値が除算可能かどうかを判別します。
  • 文字列ではなく配列を返します。作業が簡単です。
于 2012-05-19T11:04:38.907 に答える
1

XxYのモジュラスを簡単に実行できるはずです。0の場合、XをYで除算します。1から(XをYで除算)まで実行されるループを作成し、Yにループカウンターを掛けて出力します。

于 2012-05-19T09:43:47.557 に答える
1
function findQuotients($number, $divider)
{
    $arr = array();

    if($number % $divider != 0)
    {
        //return "false";        
    }
    else 
    {
        $loop = $number / $divider;
        //$output="";
        for($i = 1; $i <= $loop; $i++)
        {
            //$output .= $i * $divider. " ";
            array_push($arr, $i * $divider);
        }           
    }
    return $arr;
}

echo print_r(findQuotients(24, 6));
echo print_r(findQuotients(24, 4));
echo print_r(findQuotients(24, 5));
于 2012-05-19T09:46:35.987 に答える
1
function steps($target,$step) {
    if (($target % $step) != 0)
        return FALSE;
    $steps = range($step,$target,$step);
    return $steps;
}

$target = 24;
for ($step = 2; $step < 13; ++$step) {
    echo '$step = ',$step,PHP_EOL;
    $steps = steps($target,$step);
    var_dump($steps);
}
于 2012-05-19T10:23:47.407 に答える
0

これを試して

$number = 24;
$divider = 6;
if($number % $divider != 0 )
{ 
    return false;
}
$div = $number / $divider;

for($i = 1; $i <= $div; $i++)
{
    echo $i*$divider;
}
于 2012-05-19T09:45:05.160 に答える
0

次のスニペットでうまくいきます。$numこれは、が<= 0になるまで繰り返す単純なループです$num。除算器によって減算され、各ターンの次の倍数が「除算器ステップ」$divとして格納されます。

$num = 24;
$div = 4;

if ($num % $div != 0) {
    exit('invalid');
}

$divider = array();
for ($i = 1; $num > 0; $i++) {
    $divider[] = ($i * $div);
    $num -= $div;
}

echo 'in: ' . $num . '<br />';
echo 'div: ' . $div . '<br />';
echo '<pre>';
print_r($divider);
exit;
于 2012-05-19T09:46:34.010 に答える
0

説明に基づいて数値を乗算し、次に特定の結果に基づいて関数を白くします。

$num = 6;
$counter = 2;
$solution = 24;
while ($num * $counter) {
    $result= $num * $counter;
    if ($result = $solution) {
        echo $result;
        // here would go your event
        break;
    }
}
于 2012-05-19T10:10:12.093 に答える