2017-08-07 87 views
0

我有两个数组。我想根据$daterange的计数显示tr标签,在此范围内,我需要检查date值和second arraydate值。基于第一个数组显示tr标签并与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'] 
    ]; 

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> 

但是tr标签基于第二阵列计数8次。

如何显示tr 5次,这是第一个数组的计数,并将第二个数组与内部日期进行比较?

+0

从这个代码,我想你实际上是打印40个非检查输入(5'tr' 8'每个输入“)。 – nanocv

+0

@nanocv:是啊我该如何避免这种情况? – 06011991

+0

你的第二个数组缺少一些东西,将它复制并粘贴到你将看到的编辑器中。 –

回答

1

你只需要完成这个任务一个循环,当你只修改行的单个属性你不应该重复整个线路(作为干燥问题)。

array_column()将充分准备$job数据。

这是我的建议:(Demo

$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> 
-1
$job = [0 => ['id' =>1,'date' => '03/10/2017'/* ' here*/ ], 
    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'] 
] 
+1

你能解释一下这可能如何解决OP的问题。它修复了代码中的一个错误,并未显示如何解决该问题。 –

+0

如果你不把'它可能会导致错误:/ –

-1

试试这个作为你的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> 
1

所以我创建了一个功能searchForDate如果日期第二阵列中存在与否,尝试下面的代码,在这里,将检查是demo

<?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; 
} 
?> 
+0

我该如何做到这一点? – 06011991

+0

我已更新完整的代码。希望这可以帮助你。 –

1

这里有我的解决方案,非常类似于你的。

我试过了,它工作正常。

<?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每个元素我寻找该日期内$job阵列与同时循环内部。如果我找到它,它会停止搜索并显示选中的输入。否则,如果它遍历所有数组,并且没有找到该日期,则它显示未检查的输入。

(您可以复制并粘贴到您的代码)

相关问题