PHP-多个数组形成字符串的循环句柄

PHP-多个数组形成字符串的循环句柄,php,laravel,for-loop,foreach,Php,Laravel,For Loop,Foreach,我有两个多维数组: $rows=[{"id":9,"auditorium_id":10,"row_name":"A","row_seats_no":56,"seat_price":140,.....},{....}] 对于每一个$行,该行还有另一个$空格数组: $spaces = [{"id":1,"row_id":9,"starts_at":31,"ends_at":35,"deleted_at":null},{"id":11,"row_id":9,"starts_at":21,"ends_

我有两个多维数组:

$rows=[{"id":9,"auditorium_id":10,"row_name":"A","row_seats_no":56,"seat_price":140,.....},{....}]
对于每一个$行,该行还有另一个$空格数组:

$spaces = [{"id":1,"row_id":9,"starts_at":31,"ends_at":35,"deleted_at":null},{"id":11,"row_id":9,"starts_at":21,"ends_at":25,"deleted_at":null},{"id":21,"row_id":9,"starts_at":10,"ends_at":17,"deleted_at":null}]
我尝试创建一个字符串来描述要返回到javascript的每一行中的座位和空格,例如,对于“a”行,应该返回这样的字符串:

'AAAAAAAA____AAAAAAAA____AAAAAAAAA', 'row-B', 'row-C', etc...
其中“A”字符表示座位,“\u”表示空位

这是我的密码:

foreach ($auditorium->seatRows as $key => $row) { // inside single row

        $map = $map."'";
        $rowSpaces = RowSpace::where('row_id', '=', $row->id)->get();

        for($i = 1; $i <= $row->row_seats_no; $i++){ // print seat or space, where $i = column_number
            foreach ($rowSpaces as $spaceKey => $rowSpace) {
                if($i > $rowSpaces[$spaceKey]->starts_at && $i < $rowSpaces[$spaceKey]->ends_at)
                {
                    $map = $map."_";
                }
            }

            if($i <= $rowSpaces[$spaceKey]->starts_at || $i > $rowSpaces[$spaceKey]->ends_at)
            {
                $map = $map."{$row->row_name}[{$row->row_name}$i]";
            }

        }

        $map = $map."',";

        $seats = $seats."{$row->row_name}:{'price': {$row->seat_price}, 'classes': '{$row->seatClasses}', 'category': 'VIP'},";

        array_push($rows, $row->row_name);

    }
foreach($auditorium->seatRows as$key=>$row){//在单行内
$map=$map.“'”;
$rowSpaces=RowSpace::where('row_id','=',$row->id)->get();
对于($i=1;$i行\座位\号;$i++){//打印座位或空间,其中$i=列\号
foreach($rowSpace作为$spaceKey=>$rowSpace){
如果($i>$rowSpaces[$spaceKey]->开始于&&$i<$rowSpaces[$spaceKey]->结束于)
{
$map=$map.“quo;”;
}
}
如果($i开始于| |$i>$rowSpaces[$spaceKey]->结束于)
{
$map=$map.“{$row->row_name}[{$row->row_name}$i]”;
}
}
$map=$map.“,”;
$seats=$seats.“{$row->row_name}:{'price':{$row->seat_price},'classes':{$row->seatclass},','category':'VIP'}”;
数组\u push($rows,$row->row\u name);
}
我的问题是如何循环遍历每个座位(for循环中的i),并知道它是一个座位还是一个空间

for($i = 1; $i <= $row->row_seats_no; $i++){ // print seat or space, where $i = column_number
            foreach ($rowSpaces as $spaceKey => $rowSpace) {
                if($i > $rowSpaces[$spaceKey]->starts_at && $i < $rowSpaces[$spaceKey]->ends_at)
                {
                    $map = $map."_";
                }
            }

            if($i <= $rowSpaces[$spaceKey]->starts_at || $i > $rowSpaces[$spaceKey]->ends_at)
            {
                $map = $map."{$row->row_name}[{$row->row_name}$i]";
            }

        }
用于($i=1;$i行\座位\号;$i++){//打印座位或空间,其中$i=列\号
foreach($rowSpace作为$spaceKey=>$rowSpace){
如果($i>$rowSpaces[$spaceKey]->开始于&&$i<$rowSpaces[$spaceKey]->结束于)
{
$map=$map.“quo;”;
}
}
如果($i开始于| |$i>$rowSpaces[$spaceKey]->结束于)
{
$map=$map.“{$row->row_name}[{$row->row_name}$i]”;
}
}

非常感谢任何帮助

我会做一些不同的事情。而不是每个座位都搜索是否有空。我假设没有一个是空的,创建一个包含所有座位的数组,它们只替换该数组中的空座位。这未经测试,但可能类似于:

$return = array();
foreach ($auditorium->seatRows as $key => $row) { // inside single row

    $seatArray = array();

    // CREATING ALL SEATS
    for($i = 1; $i <= $row->row_seats_no; $i++){
        $seatArray[$i] = $row->row_name;
    }

    // CHANGING EMPTY SEATS
    foreach ($rowSpaces as $spaceKey => $rowSpace) {
        // NOT SURE YOU WANT > OR >=
        for($i = $rowSpaces[$spaceKey]->starts_at; $i < $rowSpaces[$spaceKey]->ends_at; $i++)
            $seatArray[$i] = "_";
    }

    $rowSpaces = RowSpace::where('row_id', '=', $row->id)->get();

    // ADDING TO RESULT
    $return[] = implode("", $seatArray);

    $seats = $seats."{$row->row_name}:{'price': {$row->seat_price}, 'classes': '{$row->seatClasses}', 'category': 'VIP'},";

    array_push($rows, $row->row_name);

}
$map = implode(", ", $return);
$return=array();
foreach($auditorium->seatRows as$key=>$row){//在单行内
$seatArray=array();
//创建所有座位
对于($i=1;$i排座位号;$i++){
$seatArray[$i]=$row->row\u name;
}
//更换空座位
foreach($rowSpace作为$spaceKey=>$rowSpace){
//不确定是否要>或>=
对于($i=$rowSpaces[$spaceKey]->开始于;$i<$rowSpaces[$spaceKey]->结束于;$i++)
$seatArray[$i]=“_u”;
}
$rowSpaces=RowSpace::where('row_id','=',$row->id)->get();
//增加结果
$return[]=内爆(“,$seatArray”);
$seats=$seats.“{$row->row_name}:{'price':{$row->seat_price},'classes':{$row->seatclass},','category':'VIP'}”;
数组\u push($rows,$row->row\u name);
}
$map=内爆(“,”,$return);
代码有一些错误(纠正了一些)。我现在用这个做了测试。将对象更改为数组,因此我不必创建对象和函数

$data=[["id"=>9,"auditorium_id"=>10,"row_name"=>"A","row_seats_no"=>56,"seat_price"=>140],["id"=>910,"auditorium_id"=>10,"row_name"=>"B","row_seats_no"=>56,"seat_price"=>140]];

$spaces = [["id"=>1,"row_id"=>9,"starts_at"=>31,"ends_at"=>35,"deleted_at"=>null],
            ["id"=>11,"row_id"=>9,"starts_at"=>21,"ends_at"=>25,"deleted_at"=>null],
            ["id"=>21,"row_id"=>9,"starts_at"=>10,"ends_at"=>17,"deleted_at"=>null]];

$return = array();
foreach ($data as $key => $row) { // inside single row

    $seatArray = array();

    // CREATING ALL SEATS
    for($i = 1; $i <= $row['row_seats_no']; $i++){
        $seatArray[$i] = $row['row_name'];
    }

    // CHANGING EMPTY SEATS
    foreach ($spaces as $spaceKey => $rowSpace) {
        // NOT SURE YOU WANT > OR >=
        for($i = $rowSpace['starts_at']; $i < $rowSpace['ends_at']; $i++)
            $seatArray[$i] = "_";
    }

    // ADDING TO RESULT
    $return[] = implode("", $seatArray);

    $seats = $seats."{$row->row_name}:{'price': {$row->seat_price}, 'classes': '{$row->seatClasses}', 'category': 'VIP'},";


}
$map = implode(", ", $return);

echo $map;
$data=[[“id”=>9,“礼堂id”=>10,“排名”=>A”,“排座号”=>56,“座价”=>140],“id”=>910,“礼堂id”=>10,“排名”=>B”,“排座号”=>56,“座价”=>140];
$spaces=[[“id”=>1,“行id”=>9”,从“=>31”开始,到“=>35”结束,在“=>null”删除,
[“id”=>11,“row\u id”=>9,“从”=>21开始”,在”=>25结束,“删除”=>null],
[“id”=>21,“row\u id”=>9,“从”=>10开始”,在“=>17结束,“删除”=>null];
$return=array();
foreach($key=>$row形式的数据){//在单行内
$seatArray=array();
//创建所有座位
对于($i=1;$i$rowSpace){
//不确定是否要>或>=
对于($i=$rowSpace['start_'at'];$i<$rowSpace['ends_'at'];$i++)
$seatArray[$i]=“_u”;
}
//增加结果
$return[]=内爆(“,$seatArray”);
$seats=$seats.“{$row->row_name}:{'price':{$row->seat_price},'classes':{$row->seatclass},','category':'VIP'}”;
}
$map=内爆(“,”,$return);
echo$地图;
我只是不确定$spaces数据中是否有与row_座位相关的内容。是排id吗?如果是这样,它需要一个If来检查foreach循环中的空格。

下面是代码

foreach($rows as $row)
{
  foreach($row as $seat)
  {
    $arr[$seat['id'] - 1][$seat['row_seats_no'] - 1] = $seat['row_name'];
  }
}
foreach($spaces as $row)
{
  foreach($row as $seat)
  {
    foreach(range($seat['starts_at'] - 1, $seat['ends_at'] - 1) as $index)
    {
      $arr[$seat['row_id'] - 1][$index] = '_';
    }
  }
}
$results = array_map(function($v){return implode($v);}, $arr);

我是这样解决这个问题的:

    $rowsArray = [];
    $seatsArray = [];

    foreach ($this->seatRows as $key => $row) { // inside single row
        $rowSpaces = RowSpace::where('row_id', '=', $row->id)->get();
        for($i = 1; $i <= $row->row_seats_no; $i++){ // print seat or space
            foreach ($rowSpaces as $spaceKey => $rowSpace) { // inside space object
                if($i > $rowSpace->starts_at && $i < $rowSpace->ends_at)
                {
                    for($spaceCounter = $i; $spaceCounter < $rowSpace->ends_at; $spaceCounter++){ // while in this space
                        $seatsArray["s$spaceCounter"] = "_";
                    }
                }
            }

            $seatsArray[$i] = "$row->row_name$i";

        }

        $rowsArray[$row->row_name] = $seatsArray;

    }

    // $rowsArray now contain each row with seats and spaces
$rowsArray=[];
$seatsArray=[];
foreach($this->seatRows as$key=>$row){//在单行内
$rowSpaces=RowSpace::where('row_id','=',$row->id)->get();
对于($i=1;$i行\座位\号;$i++){//打印座位或空间
foreach($rowSpaces as$spaceKey=>$rowSpace){//内部空间对象
如果($i>$rowSpace->开始于&&$i<$rowSpace->结束于)
{
对于($spaceCounter=$i;$spaceCounter<$rowSpace->结束于;$spaceCounter++){//在该空间中
$seatsArray[“s$spaceCounter”]=“389;”;
}
}
}
$seatsArray[$i]=“$row->row\u name$i”;
}
$rowsArray[$row->row_name]=$seatsArray;
}
//$rowsArray现在包含每一行的座位和空间

美元行和美元空格的长度是否相同。对于每一个$行,有一个$空格,反之亦然。每一行的总座位数相同吗?@Krisrove否,$行和$空格的座位数不同length@KrisRoofe并非每个$row都有相同数量的座位,也不是相同数量的$spaces。当用户输入这些值时,我不能保证这一点。谢谢您的回答,但是您首先将所有座位添加到$seatArray,然后将空格添加到同一数组中。我想通过座椅循环(您的第一个for循环,其中$I是座椅编号),并检查此位置是否存在座椅或空间?稍后不会添加空座椅,它应该用空座椅替换已填充的座椅。给你同样的恩惠