基于第一个数组计数显示tr标记,并与PHP中的第二个数组进行比较

基于第一个数组计数显示tr标记,并与PHP中的第二个数组进行比较,php,arrays,forms,loops,checkbox,Php,Arrays,Forms,Loops,Checkbox,我有两个数组。我想根据$daterange的计数显示tr标记,在该标记中,我需要使用第二个数组日期值检查日期值 第一个阵列: $daterange = ['01/10/2017','02/10/2017','03/10/2017','04/10/2017','05/10/2017']; 第二个阵列: $job = [0 => ['id' =>1,'date' => '03/10/2017'], 1 => ['id' =>2,'date' =>

我有两个数组。我想根据
$daterange
的计数显示
tr
标记,在该标记中,我需要使用
第二个数组
日期
值检查
日期

第一个阵列:

$daterange = ['01/10/2017','02/10/2017','03/10/2017','04/10/2017','05/10/2017'];
第二个阵列:

$job = [0 => ['id' =>1,'date' => '03/10/2017'],
        1 => ['id' =>2,'date' => '12/10/2017'],
        2 => ['id' =>3,'date' => '14/10/2017'],
        3 => ['id' =>4,'date' => '13/10/2017'],
        4 => ['id' =>5,'date' => '03/10/2017'],
        5 => ['id' =>6,'date' => '04/10/2017'],
        6 => ['id' =>7,'date' => '05/10/2017'],
        7 => ['id' =>8,'date' => '01/10/2017']
    ];
Html代码:

<table>
<?php foreach($daterange as $key=>$day)
{ 
?>
<tr>
<td>

    <?php foreach($job as $jdata){
    if(($day->format('Y-m-d') == ($jdata->date)) {
    ?>
    <input type="radio" checked class="radio-check" name="date" value="">
    <?php
    } else {
    ?>
    <input type="radio"  class="radio-check" name="date" value="">
    <?php
    }
    ?>
</td>
</tr>
<?php
}
?>
</table>


尝试将此作为您的for循环

<table>   
    <?php
    foreach ($job as $key => $jdata) {
        if (in_array($jdata['date'], $daterange)) {
            ?>
            <tr>
                <td>
                    <input type="radio" checked class="radio-check" name="date" value="">
                </td>
            </tr>
            <?php
        }
    }
    ?>
</table>

因此我创建了一个函数
searchForDate
,该函数将检查第二个数组中是否存在日期,请尝试以下代码,下面是:


这是我的解决方案,与您的非常相似

我试过了,效果不错

<?php


$daterange = ['01/10/2017', '02/10/2017', '03/10/2017', '04/10/2017', '05/10/2017'];

$job = [0 => ['id' => 1, 'date' => '03/10/2017'],
    1 => ['id' => 2, 'date' => '12/10/2017'],
    2 => ['id' => 3, 'date' => '14/10/2017'],
    3 => ['id' => 4, 'date' => '13/10/2017'],
    4 => ['id' => 5, 'date' => '03/10/2017'],
    5 => ['id' => 6, 'date' => '04/10/2017'],
    6 => ['id' => 7, 'date' => '05/10/2017'],
    7 => ['id' => 8, 'date' => '01/10/2017']
]

?>

<table>
    <?php
    foreach ($daterange as $day) {
        ?>
        <tr>
            <td>
                <?php

                $i = 0;
                $numJobs = count($job);
                $dateFound = 0;

                while ($i < $numJobs && !$dateFound) {
                    if ($job[$i]['date'] == $day) {
                        $dateFound = 1;
                    }
                    $i++;
                }

                if ($dateFound) {
                    ?>
                    <input type="radio" checked class="radio-check" name="date" value="">
                    <?php
                } else {
                    ?>
                    <input type="radio" class="radio-check" name="date" value="">
                    <?php
                }
                ?>
            </td>
        </tr>
        <?php
    }
    ?>
</table>

$daterange
的每个元素中,我使用while循环在
$job
数组中查找该日期。如果我找到它,它将停止搜索并显示选中的输入。否则,如果它遍历了所有数组,但没有找到该日期,它将显示未选中的输入


(您只需复制并粘贴到代码中即可)

此任务只需一个循环,当您仅修改行中的单个属性时,不应重复整行内容(作为干燥问题)

array\u column()
将充分准备
$job
数据

这是我的建议:()

$daterange=['01/10/2017'、'02/10/2017'、'03/10/2017'、'04/10/2017'、'05/10/2017'];
$job=[0=>['id'=>1,'date'=>'03/10/2017'],
1=>['id'=>2,'date'=>'12/10/2017'],
2=>['id'=>3,'date'=>'14/10/2017'],
3=>['id'=>4,'date'=>'13/10/2017'],
4=>['id'=>5,'date'=>2017年10月3日'],
5=>['id'=>6,'date'=>'04/10/2017'],
6=>['id'=>7,'date'=>2017年10月5日'],
7=>['id'=>8,'date'=>'01/10/2017']
];
$job_dates=数组_列($job,'date');//生成一维日期数组
回声';
foreach($daterange作为$date){

echo“从这段代码中,我认为您实际上正在打印40个未经检查的输入(5个
tr
,每个8个
input
)@nanocv:是的,我该如何避免?你的第二个数组缺少一些东西,复制并粘贴到你的编辑器中,你会看到。@GulmuhammadAkbari:但是第一个数组的计数总是小于第二个数组。在这种情况下,我该如何做?问题不清楚。你想在每个
tr
中只显示一个
输入吗解释这可能如何解决OP的问题。它修复了代码中的一个错误,但没有显示如何解决问题。在视图中如何执行此操作?我已更新了整个代码。希望这对您有所帮助。
<?php
$daterange = ['01/10/2017','02/10/2017','03/10/2017','04/10/2017','05/10/2017'];
<table>
    <?php foreach($daterange as $key=>$day)
{ 
?>
<tr>
    <td>
        <?php foreach($daterange as $key=>$day){ 
    if(searchForId($day)) {
        ?>
        <input type="radio" checked class="radio-check" name="date" value="">
        <?php    } else {
        ?>
        <input type="radio"  class="radio-check" name="date" value="">
        <?php    } ?>
    </td>
</tr>
<?php } ?>
</table>
<?php
 function searchForId($day) {
     $job = [
         0 => ['id' =>1,'date' => '03/10/2017' ],
         1 => ['id' =>2,'date' => '12/10/2017'],
         2 => ['id' =>3,'date' => '14/10/2017'],
         3 => ['id' =>4,'date' => '13/10/2017'],
         4 => ['id' =>5,'date' => '03/10/2017'],
         5 => ['id' =>6,'date' => '04/10/2017'],
         6 => ['id' =>7,'date' => '05/10/2017'],
         7 => ['id' =>8,'date' => '01/10/2017']
     ];
     foreach ($job as $key => $val) {
         if ($val['date'] === $day) {
             return $key;
         }
     }
     return null;
 }
?>
<?php


$daterange = ['01/10/2017', '02/10/2017', '03/10/2017', '04/10/2017', '05/10/2017'];

$job = [0 => ['id' => 1, 'date' => '03/10/2017'],
    1 => ['id' => 2, 'date' => '12/10/2017'],
    2 => ['id' => 3, 'date' => '14/10/2017'],
    3 => ['id' => 4, 'date' => '13/10/2017'],
    4 => ['id' => 5, 'date' => '03/10/2017'],
    5 => ['id' => 6, 'date' => '04/10/2017'],
    6 => ['id' => 7, 'date' => '05/10/2017'],
    7 => ['id' => 8, 'date' => '01/10/2017']
]

?>

<table>
    <?php
    foreach ($daterange as $day) {
        ?>
        <tr>
            <td>
                <?php

                $i = 0;
                $numJobs = count($job);
                $dateFound = 0;

                while ($i < $numJobs && !$dateFound) {
                    if ($job[$i]['date'] == $day) {
                        $dateFound = 1;
                    }
                    $i++;
                }

                if ($dateFound) {
                    ?>
                    <input type="radio" checked class="radio-check" name="date" value="">
                    <?php
                } else {
                    ?>
                    <input type="radio" class="radio-check" name="date" value="">
                    <?php
                }
                ?>
            </td>
        </tr>
        <?php
    }
    ?>
</table>
$daterange = ['01/10/2017','02/10/2017','03/10/2017','04/10/2017','05/10/2017'];
$job = [0 => ['id' =>1,'date' => '03/10/2017'],
        1 => ['id' =>2,'date' => '12/10/2017'],
        2 => ['id' =>3,'date' => '14/10/2017'],
        3 => ['id' =>4,'date' => '13/10/2017'],
        4 => ['id' =>5,'date' => '03/10/2017'],
        5 => ['id' =>6,'date' => '04/10/2017'],
        6 => ['id' =>7,'date' => '05/10/2017'],
        7 => ['id' =>8,'date' => '01/10/2017']
    ];
$job_dates=array_column($job,'date');  // generate 1-dimensional array of dates

echo '<table>';
    foreach($daterange as $date){
        echo "<tr><td><input type=\"radio\" class=\"radio-check\" name=\"date\" value=\"$date\"",(in_array($date,$job_dates)?' checked':''),'></td></tr>';
    }
echo "</table>";

/* or write it over several lines like this:
    echo '<table>';
    foreach($daterange as $date){
        echo '<tr>';
            echo '<td>';
                echo "<input type=\"radio\" class=\"radio-check\" name=\"date\" value=\"$date\"";
                if (in_array($date,$job_dates)){
                    echo ' checked';
                }
                echo '>';
            echo '</td>';
        echo '</tr>';
    }
    echo "</table>";
*/
<table>
    <tr><td><input type="radio" class="radio-check" name="date" value="01/10/2017" checked></td></tr>
    <tr><td><input type="radio" class="radio-check" name="date" value="02/10/2017"></td></tr>
    <tr><td><input type="radio" class="radio-check" name="date" value="03/10/2017" checked></td></tr>
    <tr><td><input type="radio" class="radio-check" name="date" value="04/10/2017" checked></td></tr>
    <tr><td><input type="radio" class="radio-check" name="date" value="05/10/2017" checked></td></tr>
</table>