PHP:配列を使用せずに関数を複数の変数に適用する
質問
4〜5種類の変数に適用したい関数(簡単にするためにcount()を使用します)があります。今、私はこれをやっています:
$a = count($a);
$b = count($b);
$c = count($c);
$d = count($d);
もっと良い方法はありますか?配列でarray_map関数を使用できることは知っていますが、値は配列内の値ではなく、個別の値のままにしておきます。
ありがとう。
解決
値を配列に入れたくないと言ったのは知っていますが、値をループするための配列を作成するのはどうですか?すなわち:
$arr = Array($a, $b, $c, $d);
foreach ($arr as &$var)
{
$var = count($var);
}
それが本当に元の方法よりもずっときれいかどうかはわかりませんが。
他のヒント
データを収集するための繰り返し変数がたくさんある場合、コードの設計が不十分であり、数十個の変数ではなく、配列を使用して値を保存するだけである必要があります。おそらく、次のようなものが必要でしょう:
$totals = array("Visa"=>0,"Mastercard"=>0,"Discover"=>0,"AmericanExpress"=>0);
その後、単純に配列要素に追加します(たとえば、SQLからのwhileループなど)。
$totals['Visa'] += $row['total'];
しかし、このルートを本当に使いたい場合は、提供されているツールを使用できます。これを大規模なバッチで行いたい場合は、配列が適しています。次に、配列をforeachし、次のように変数変数を使用します。
$variables = array('a','b','c'...);
foreach ( $variables as $var )
{
${$var} = count(${var});
}
BenとTravisOが言ったことですが、 array_walk を少し簡潔なコードに使用します:
$arr = Array($a, $b, $c, $d); array_walk($arr, count);
extractを使用して、値を再度取得できます。
//test data
$a = range(1, rand(4,9));
$b = range(1, rand(4,9));
$c = range(1, rand(4,9));
//the code
$arr = array('a' => $a, 'b' => $b, 'c' => $c);
$arr = array_map('count', $arr);
extract($arr);
//whats the count now then?
echo "a is $a, b is $b and c is $c.\n";
「より良い」をどのように測定しますか?あなたは賢くて短いものを思い付くかもしれませんが、あなたが持っているものは理解するのが最も簡単であるように見えます、これは仕事1です。私はそれをそのままにしておきますが、新しい変数に割り当てます(例えば$ sum_a、.. 。)。
所属していません StackOverflow