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
 <?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 回答
1

首先列出你需要的东西:

  • 有 4 个不能大于 10 的盒子。
  • 还有 4 个不能大于 100 的盒子。
  • 所有的箱子都必须按顺序填写。

然后创建一个实现该功能的逻辑:

  • 用 10 填充前 4 个框,然后从成员变量中减去它。如果 $member 低于 10,只需将其写入当前框。
  • 用 100 填充 otger 4 框并从成员变量中减去它。如果 $member 低于 10,只需将其写入当前框。

如您所见,这两个操作几乎相同。然后你可以使它成为一个操作:

  • 填充 8 个框 [如果前 4 个框 = 10,否则 100] 并从 $member 中减去。如果 $member 低于 [如果前 4 个框 = 10,否则 100] 只需将其写入当前框。

这是一些解决方案(可能还有更多):

使用 Closure 的 2 个数组的 Php 5.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 个数组的 PHP 5.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);
?>

使用 foreach 的 2 个数组的 PHP 5.3- 解决方案:

<?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);
?>

使用 foreach 的 1 个数组的 PHP 5.3- 解决方案:

<?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 回答