繁体   English   中英

将一个数组分成多个数组

[英]Breaking out one array into multiple arrays

我正在尝试制作一个按字母顺序轮换的简单名单。

我有一个数据库,其中包含10个用户的列表,按列排序,名为First_Name。 我正在使用PHP从数据库中检索所有人的名字,并按字母顺序将它们放入数组中。

我需要做的是创建另外4个数组来列出每个数组中的3个人。 我可以通过执行以下操作来获取单个数组中的所有用户: $query = "SELECT * FROM carpark";

阵列应该总是由3个人填充,当人数用完时,应该从循环开始添加人员以填补空白。

我现在的方式是从数据库表中返回接下来的3个名字,如果我想旋转它们可能不会起作用。

我希望我所要求的是有道理的..

这是我到目前为止:

<?php

include_once 'connect.php';

dbconnect("roster");

//=============================================
$w1_query = "SELECT * FROM carpark ORDER BY First_Name LIMIT 0,3";
$w1_result = mysqli_query($conn, $w1_query) or die("error getting data");

$w1_arr = array();
while ($w1_data = mysqli_fetch_array($w1_result, MYSQLI_ASSOC)) {
    array_push($w1_arr, $w1_data['First_Name']);
}
sort($w1_arr);
print_r($w1_arr);
//=============================================
//=============================================
$w2_query = "SELECT * FROM carpark ORDER BY First_Name LIMIT 3,5";
$w2_result = mysqli_query($conn, $w2_query) or die("error getting data");

$w2_arr = array();
while ($w2_data = mysqli_fetch_array($w2_result, MYSQLI_ASSOC)) {
    array_push($w2_arr, $w2_data['First_Name']);
}
sort($w2_arr);
//print_r($w2_arr);
//=============================================
//=============================================
$w3_query = "SELECT * FROM carpark ORDER BY First_Name LIMIT 6,8";
$w3_result = mysqli_query($conn, $w3_query) or die("error getting data");

$w3_arr = array();
while ($w3_data = mysqli_fetch_array($w3_result, MYSQLI_ASSOC)) {
    array_push($w3_arr, $w3_data['First_Name']);
}
sort($w3_arr);
//print_r($w3_arr);
//=============================================
//=============================================
$w4_query = "SELECT * FROM carpark ORDER BY First_Name LIMIT 9,11";
$w4_result = mysqli_query($conn, $w4_query) or die("error getting data");

$w4_arr = array();
while ($w4_data = mysqli_fetch_array($w4_result, MYSQLI_ASSOC)) {
    array_push($w4_arr, $w4_data['First_Name']);
}
sort($w4_arr);
//print_r($w4_arr);
//=============================================

//print_r($week1_arr);

echo '<table border=1><tr><th></th><th>week 1</th><th>week 2</th><th>week 3</th><th>week 4</th></tr>';

for ($x = 0; $x <= 2; $x++) {
echo '<tr><td>Bay '.$x.'</td><td>'.$w1_arr[$x].'</td><td>'.$w2_arr[$x].'</td><td>'.$w3_arr[$x].'</td><td>'.$w4_arr[$x].'</td></tr>';
}

echo '</table>';

?>

这是上面的输出,你可以看到最后两个方框应该用ChrisEric填充。

在此输入图像描述

也许是这样的,假设你在$names数组中有所有名字,带有数字键( array_merge所需功能所需)。

$numBays = 3;
$numWeeks = 4;
$weeks = [];
$pool = [];
do {
    // Fill pool of names to a point where we have at least $numBays names
    while (count($pool) < $numBays) {
        $pool = array_merge($pool, $names);
    }
    // Extract an array containing $numBays names from the name pool
    $weeks[] = array_splice($pool, 0, $numBays);
} while(count($weeks) < $numWeeks);

这应该给你一个$weeks数组,包含$numWeeks数组,每个数组都有$numBays名称,然后你可以像现在一样循环生成你的输出。

for ($bay = 0; $bay < $numBays; $bay++) {
    echo '<tr><td>Bay '.$bay.'</td>';
    for ($week = 0; $week < $numWeeks; $week++) {
        echo '<td>'.$weeks[$week][$bay].'</td>';
    }
    echo '</tr>';
}

根据系统的复杂程度,您可以将http://php.net/manual/en/function.array-merge.php与自身合并,然后将其拆分为array_chunk http://php.net/manual/ en / function.array-chunk.php

$query = "SELECT * FROM carpark ORDER BY First_Name";
$result = mysqli_query($mysqli, $query) or die("error getting data");

$arr = array();
while ($data = mysqli_fetch_array($result, MYSQLI_ASSOC)) {
    array_push($arr, $data['First_Name']);
}
sort($arr);

$combined=array_merge($arr,$arr);
$output=array_chunk($combined,3);

echo '<table border=1><tr><th></th><th>week 1</th><th>week 2</th><th>week 3</th><th>week 4</th></tr>';

for ($x = 0; $x <= 2; $x++) {
    echo '<tr><td>Bay '.$x.'</td><td>'.$output[0][$x].'</td>   <td>'.$output[1][$x].'</td><td>'.$output[2][$x].'</td><td>'.$output[3][$x].'</td></tr>';
}

echo '</table>';

如果需要创建一个数组将很容易。 希望这会奏效。 数组将根据$ NoOfRows和$ NoOfWeeks的值分配生成

$NoOfRows  = 3;
$NoOfWeeks = 4;
$totalLots = $NoOfRows * $NoOfWeeks;
$dataArr = array();

//fetch all persons
$query = "SELECT * FROM carpark ORDER BY First_Name";
$result = mysqli_query($conn, $query) or die("error getting data");
while ($row = mysqli_fetch_array($result, MYSQLI_ASSOC)) {
    array_push($dataArr, $row['First_Name']);
}
$noOfPersons = count($dataArr);

//Create a new array with filling all lots
while ($noOfPersons < $totalLots) {
    $dataArr = array_merge($dataArr, $dataArr);
    $noOfPersons = count($dataArr);
}
$weekArr = array_chunk($dataArr , $NoOfRows);
//print the table
echo "<table border=1>";
for ($row = 0; $row < $NoOfRows; $row++) {
    if ($row == 0) {
        echo "<tr><td></td>";
        for ($col = 1; $col <= $NoOfWeeks; $col++) {
            echo "<td>Week $col</td>";
        }
        echo "</tr>";
    }
    for ($col = 0; $col < $NoOfWeeks; $col++) {
        if ($col == 0) {
            echo "<tr><td>Bay $row</td>";
        }
        echo "<td>";
        echo $weekArr[$col][$row];
        echo "</td>";
    }
    echo "</tr>";
}
echo "</table>";

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM