Php 将一个阵列拆分为多个阵列

Php 将一个阵列拆分为多个阵列,php,mysql,Php,Mysql,我正在尝试做一个简单的名册,将按字母顺序轮换 我有一个数据库,其中有10个用户,按名为First_Name的列排序。我使用PHP从数据库中检索所有人名,并按字母顺序将其放入数组中 我需要能够做的是再创建4个数组来列出每个数组中的3个人。我可以通过执行以下操作获得单个数组中的所有用户:$query=“SELECT*FROM carpark” 数组应始终填充3人,当人数用完时,应从循环开始添加人员以填补空白 我现在的方法是从数据库表中返回接下来的3个名称,如果我想旋转它们,这可能不起作用 我希望我所

我正在尝试做一个简单的名册,将按字母顺序轮换

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

我需要能够做的是再创建4个数组来列出每个数组中的3个人。我可以通过执行以下操作获得单个数组中的所有用户:
$query=“SELECT*FROM carpark”

数组应始终填充3人,当人数用完时,应从循环开始添加人员以填补空白

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

我希望我所要求的有道理

以下是我到目前为止的情况:


这是上面的输出,正如您所看到的,最后两个框中应该填入
Chris
Eric


可能是这样的,假设您拥有
$names
数组中的所有名称,并带有数字键(所需的
数组\u merge
功能需要)


根据系统的复杂性,您可以将结果与自身合并,然后使用array_chunk将其拆分

$query=“按名字从停车场订单中选择*”;
$result=mysqli_query($mysqli,$query)或die(“获取数据时出错”);
$arr=array();
而($data=mysqli\u fetch\u数组($result,mysqli\u ASSOC)){
数组推送($arr,$data['First_Name']);
}
排序($arr);
$combined=array\u merge($arr,$arr);
$output=array\u chunk($combined,3);
echo“第1周第2周第3周第4周”;

对于($x=0;$x而言,如果根据需要创建一个数组,这将很容易。希望这能起作用。数组将根据为$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>";
$NoOfRows=3;
$NoOfWeeks=4;
$totalots=$NoOfRows*$NoOfWeeks;
$dataArr=array();
//招人
$query=“按名字从停车场订单中选择*”;
$result=mysqli_query($conn$query)或die(“获取数据时出错”);
而($row=mysqli\u fetch\u数组($result,mysqli\u ASSOC)){
数组推送($dataArr,$row['First_Name']);
}
$noOfPersons=计数($dataArr);
//创建一个填充所有批次的新阵列
而($nooppersons<$totalots){
$dataArr=array\u merge($dataArr,$dataArr);
$noOfPersons=计数($dataArr);
}
$weekArr=array\u chunk($dataArr,$NoOfRows);
//打印表格
回声“;
对于($row=0;$row<$NoOfRows;$row++){
如果($row==0){
回声“;

对于($col=1;$col这听起来相当完美。我需要研究你的答案,以确保我理解它的所有方面,但我非常感谢这个优雅的解决方案。非常感谢!你可以将它与Jon C的答案结合起来,使它更漂亮。
array\u chunk
可以取代外部的
do…而
循环和
数组_splice
,只要您最初让
$pool
有足够的名称,至少
$NumDays*$numWeeks
。这些东西总是折衷的,但我怀疑您在您的用例中会遇到任何实际的内存限制等。是的,这很好地工作,并且喜欢您为考虑额外的间隔而内置的灵活性谢谢你!
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>';
}
$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  = 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>";