0

私はマルチレベルマーケティングの概念に取り組んでいます。計算後、すべてのメンバーをこの $member 変数に格納し、すべてのメンバーを異なる方法で表示したいと考えています

条件:最初の 4 ボックスが 10 以下、最後の 4 ボックスが 100 以下

ケース 1: $member = 37、メンバーをそのように表示

ここに画像の説明を入力

ケース 2: $member = 300 、メンバーをそのように表示する

ここに画像の説明を入力

$a = array_fill(1, $member, 1);
$chunked_array = array_chunk($a, 10);

foreach($chunked_array as $key=>$single_arr)
    { ?>
      <div class="id_box1"><?php echo array_sum($single_arr); ?></div>
  <?php } ?>

上記のコードは、メンバーが 40 以下の場合は正常に動作しますが、メンバーが 40 を超える場合のコードの処理方法がわかりません。

助けて

4

4 に答える 4

2

$ member変数が単純な数値である場合、それを8つのスライスに分割するためだけに($ member)要素の配列を作成することは...少し冗長です。私は個人的に2つの「for」ループを使用します。これは一種の粗雑ですが、明らかであり、正常に機能するはずです。

$calcval=$member
$a=array();
for($i=0;$i<4;$i++)
    {
    $a[$i]=( ($calcval>10) ? 10 : $calcval);
    $calcval -= $a[$i];
    }
for($i=4;$i<7;$i++)
    {
    $a[$i]=( ($calcval>100) ? 100 : $calcval);
    $calcval -= $a[$i];
    }

または、配列を使い続けたい場合は、出力する前に次のようなものをコードに追加します。

$sliced_array=array_slice($a, 40);
$chunked_array2 = array_chunk($sliced_array, 100);
$output = array_merge(array_slice($chunked_array, 0, 4),array_slice($chunked_array2, 0, 4));

上記のソリューションをテストする機会はありませんでしたが、一般的な考え方は理解できると思います。

于 2012-05-11T06:24:41.403 に答える
1

最初に必要なものをリストします。

  • 10を超えることのできない4つのボックスがあります。
  • 100を超えることのできない別の4つのボックスがあります。
  • すべてのボックスを順番に入力する必要があります。

次に、それを実現するロジックを作成します。

  • 最初の4つのボックスに10を入力し、メンバー変数からそれを差し引きます。$ memberが10未満の場合は、現在のボックスに書き込みます。
  • otger 4ボックスに100を入力し、メンバー変数からそれを差し引きます。$ memberが10未満の場合は、現在のボックスに書き込みます。

ご覧のとおり、この2つの操作はほぼ同じです。次に、それを1つの操作にすることができます。

  • 8つのボックスを入力し[最初の4つのボックス=10の場合、それ以外の場合は100]、$memberからマイナスします。$memberが[最初の4つのボックス=10の場合、それ以外の場合は100]より小さい場合は、現在のボックスに書き込みます。

ここにいくつかの解決策があります(もっとあるかもしれません):

Closureを使用した2アレイのPhp5.3+ソリューション:

<?php
$member = 300;

$small_boxes = array_map(function ($value) use(&$member) {
    $return = $member > 10 ? 10 : $member;
    $member = $member > 10 ? $member - 10 : 0;

    return $return;
}, array_fill(0, 4, 0));

$big_boxes = array_map(function ($value) use(&$member) {
    $return = $member > 100 ? 100 : $member;
    $member = $member > 100 ? $member - 100 : 0;

    return $return;
}, array_fill(0, 4, 0));

var_dump($small_boxes, $big_boxes);
?>

Closureを使用した1つのアレイを使用したPhp5.3+ソリューション:

<?php
$member = 300;
$count = 1;
$boxes = array_map(function ($value) use(&$member, &$count) {
    if ($count <= 4)
    {
        $return = $member > 10 ? 10 : $member;
        $member = $member > 10 ? $member - 10 : 0;
    }
    else
    {
        $return = $member > 100 ? 100 : $member;
        $member = $member > 100 ? $member - 100 : 0;
    }

    $count++;

    return $return;
}, array_fill(0, 8, 0));

var_dump($boxes);
?>

PHP 5.3-foreachを使用した2つのアレイを使用したソリューション:

<?php
$member = 300;

$small_boxes = $big_boxes = array_fill(0, 4, 0);

foreach ($small_boxes as $key => $value)
{
    if ($member > 10)
    {
        $small_boxes[$key] = 10;
        $member -= 10;
    }
    else
    {
        $small_boxes[$key] = $member;
        $member = 0;
        break;
    }
}

foreach ($big_boxes as $key => $value)
{
    if ($member > 100)
    {
        $big_boxes[$key] = 100;
        $member -= 10;
    }
    else
    {
        $big_boxes[$key] = $member;
        $member = 0;
        break;
    }
}

var_dump($small_boxes, $big_boxes);
?>

PHP 5.3-foreachを使用した1つのアレイを使用したソリューション:

<?php

$member = 300;

$box = array_fill(0, 8, 0);

foreach ($box as $key => $value)
{
    if ($key < 4)
    {
        $box[$key] = $member > 10 ? 10 : $member;
        $member = $member > 10 ? $member - 10 : 0;
    }
    else
    {
        $box[$key] = $member > 100 ? 100 : $member;
        $member = $member > 100 ? $member - 100 : 0;
    }
}

var_dump($box);

?>

好きなものを使ってください:)

foreachを使用して印刷する必要があります。

于 2012-05-11T06:51:04.537 に答える
1
 <?php
 $member = 370;
 if ($member <= 40) {
$count = 40;
$a = array_fill(1, $count, 1);
$chunked_array = array_chunk($a, 10);
foreach($chunked_array as $key=>$single_arr){  
  ?><div class="id_box1"><?php echo array_sum($single_arr); ?></div>
<? } 
} else if ($member > 40) {
$count = 40;
$b = array_fill(1, $count, 1);
$chunked_array = array_chunk($b, 10);
foreach($chunked_array as $key=>$single_arr){ 
?>
<div class="id_box1"><?php echo array_sum($single_arr); ?></div>
<?
}
$c = array_fill(1, ($member - $count), 1);
$chunk_array = array_chunk($c, 100);
foreach($chunk_array as $key=>$single_array){
    ?>
<div class="id_box2"><?php echo array_sum($single_array); ?></div>
    <?
}
}  
?>
于 2012-05-11T06:24:12.640 に答える
1
$a = array_fill(0, $member, 1);
if ($member > 40) {
    $decs = array_slice($a, 0, 40);
    $chunked_array = array_chunk($decs, 10);
} else {
    $chunked_array = array_chunk($a, 10);
}
// draw 10 box
foreach($chunked_array as $key=>$single_arr)
{ ?>
      <div class="id_box1"><?php echo array_sum($single_arr); ?></div>
<?php } 

// draw 100 box
if ($member > 40) {
    $hundred = array_slice($a, 40);
    $chunked_array = array_chunk($hundred, 100);
    foreach($chunked_array as $key=>$single_arr)
    { ?>
      <div class="id_box1"><?php echo array_sum($single_arr); ?></div>
    <?php } 
}
?>
于 2012-05-11T06:30:22.277 に答える