PHP遍历数组时缺少一个键(似乎是存在的)


php walking through an array is missing one key ( that seems to be present )

下午好我需要遍历一个数组来查找数组中设置的日期。如果找到了日期,则输出的bgcolor需要与没有找到的不同。到目前为止一切顺利。我通过排序后的第二个数组

遍历数组
function huisjes_tabel($soorten, $huisjes, $days, $maand, $jaar){
$col_buffer = "";
$dag = $days;
$buffer = "<table border=1><tr>";
    foreach ($soorten as $soort){ 
        $col_buffer .= "<td><table border=0 width=100%>";
        $color = rand("100000","999999");
        $soort = trim($soort);
        if(isset($huisjes[$soort] )){
        echo $soort."<br />";
            for($i =1; $i <= $days; $i++){
                if(strlen($i) == 1){$dag ="0".$i;} else {$dag = $i;}
                if(in_array($jaar.$maand.$dag, $huisjes[$soort])){
                    $col_buffer .= "<tr><td align=center bgcolor=#".$color."><a href=factuurlijst.php?plaats=".$soort."&dag=".$jaar.$maand.$dag.">".$dag."</a></td></tr>";
                } else {
                    $col_buffer .= "<tr><td align=center bgcolor=#f1f1f1>".$dag."</td></tr>";               
                }
            }
        } 
        $col_buffer .= "</table></td>";
    }
    $buffer .=  $col_buffer."</tr></table>";
    return $col_buffer;
}

Array // types
(
 [0] => chalet 13
 [1] => chalet 14
 [2] => chalet 15
 [3] => chalet 16
 [4] => bungalow 1
 [5] => bungalow 2
)
Array // huisjes
(
    [chalet 16] => Array
        (
            [0] => 20140501
            [1] => 20140502
            [2] => 20140503
            [3] => 20140504
            [4] => 20140505
            [5] => 20140506
            [6] => 20140507
            [7] => 20140508
            [8] => 20140509
            [9] => 20140510
            [10] => 20140511
            [11] => 20140512
        )
    [chalet 13] => Array
        (
            [0] => 20140517
            [1] => 20140518
            [2] => 20140523
            [3] => 20140524
            [4] => 20140525
            [5] => 20140529
            [6] => 20140530
            [7] => 20140531
        )
    [chalet 14] => Array
        (
            [0] => 20140501
            [1] => 20140502
            [2] => 20140503
            [3] => 20140517
            [4] => 20140518
            [5] => 20140523
            [6] => 20140524
            [7] => 20140525
            [8] => 20140530
            [9] => 20140531
        )
    [chalet 15] => Array
        (
            [0] => 20140501
            [1] => 20140502
            [2] => 20140503
            [3] => 20140504
            [4] => 20140505
            [5] => 20140506
            [6] => 20140507
            [7] => 20140508
            [8] => 20140509
            [9] => 20140510
            [10] => 20140511
            [11] => 20140512
            [12] => 20140523
            [13] => 20140524
            [14] => 20140525
            [15] => 20140530
            [16] => 20140531
        )
    [bungalow 2] => Array
        (
            [0] => 20140517
            [1] => 20140518
            [2] => 20140519
            [3] => 20140520
            [4] => 20140521
            [5] => 20140522
            [6] => 20140528
            [7] => 20140529
            [8] => 20140530
            [9] => 20140531
        )
    [bungalow 1] => Array
        (
            [0] => 20140522
            [1] => 20140523
            [2] => 20140524
            [3] => 20140525
            [4] => 20140526
            [5] => 20140527
            [6] => 20140528
            [7] => 20140529
            [8] => 20140530
            [9] => 20140531
        )
)

我面临的问题如下:当遍历类型数组时,我没有在"chalet 13"上得到相等的匹配。我一直在调试大时间和丢失的时刻。

希望你们中的任何人都能看到显而易见的并指出来给我看欢迎所有帮助,并提前感谢

array
  0 => string 'chalet 13' (length=9)
  1 => string 'chalet 14' (length=9)
  2 => string 'chalet 15' (length=9)
  3 => string 'chalet 16' (length=9)
  4 => string 'bungalow 1' (length=10)
  5 => string 'bungalow 2' (length=10)
'chalet 13' => 
    array
      0 => int 20140517
      1 => int 20140518
      2 => int 20140523
      3 => int 20140524
      4 => int 20140525
      5 => int 20140529
      6 => int 20140530
      7 => int 20140531

尝试在foreach循环之前插入:

reset ($types);
foreach($types as $type){ ...

我认为问题在于,如果您想连接像"05"这样的整数,那么它会剥离0。所以它正在寻找像2014522这样的键,而不是20140522

这将解决你的问题:

foreach ($types as $type){ 
    if(isset($huisjes[$type] )){
        $find = date("Ymd", mktime(0, 0, 0, $maand, $dag, $jaar));
        if(in_array($find, $huisjes[$type])){
            $buffer = "<tr><td bgcolor=#".$color.">".$jaar.$maand.$dag."</td></tr>";
        } else {
            $buffer = "<tr><td bgcolor=#f1f1f1>".$jaar.$maand.$dag."</td></tr>";        
        }
    }
}

很抱歉在这上面浪费了你的时间,但是非常感谢你的好主意促使我找到解决方案!最后,数据库的值是'chalet 13',其中预订包含'chalet 13'通过在填充数组时使用strtolower,似乎数组中的$类型发生了变化,这导致了稍后代码中的不同行为。我现在更新了这个chalet的数据库,使其在所有地方都具有相同的值,并且chalet 13现在在概述中显示得很好,很干净。