2017-01-22 4 views
1

私はループのPHP whileforループがあります。なぜキーを使って配列要素にアクセスできないのですか?

whileループは$ch_forのデータを$ch_forの配列に格納しています。

Array ([ch7] => Seven [ch8] => Eight) 

そして、このラインを使用してforループでこのarrayデータにアクセスしようとしている:

echo $ch_for["ch{$x}"]; 

しかし、それはエラーメッセージを示しています:不正この配列は、これらの値を示しているprint_rを使用して

文字列オフセット 'ch7' in ...

最初のキーがch7あるので、あなたはあなたの他の分岐で$ch_forを上書きしているループ

$ch_for  = array(); 
$ch_name = array(); 

while ($fetchChannel = mysqli_fetch_array($getChannel)) { 
    $ch_id  = (int) $fetchChannel['ch_id']; 
    $ch_for[$fetchChannel['ch_name']] = htmlspecialchars($fetchChannel['ch_for']); 
    $ch_name[] = htmlspecialchars($fetchChannel['ch_name']); 
} 


for ($x=1; $x<=12; $x++) { 
    if( in_array('ch'.$x, $ch_name)) { 
     $sel = 'checked = "checked" '; 
     echo $ch_for["ch{$x}"]; 
    } else { 
     $sel = ''; 
     $ch_for = ''; 
    } 
    ?> 

    <div class="checkbox form-inline"> 
     <label><input <?php echo $sel; ?> type="checkbox" name="ch_name[]" value="ch<?php echo $x; ?>">CH<?php echo $x; ?></label> 
     <input type="text" name="ch_for[]" value="<?php echo $ch_for; ?>" placeholder="Channel details" class="form-control ch_for"> 
    </div>          
    <?php 
} 

var_dump(array_keys($ch_for));

array(2) { 
    [0]=> 
    string(3) "ch7" 
    [1]=> 
    string(3) "ch8" 
} 
+0

することができます 'のvar_dump(array_keys($ ch_for));'とポスト結果?他のブランチで '$ ch_for'を上書きしています。 – ccKep

答えて

0

の結果間とするために、したがって、最初のループ(ch1はしていません$ch_nameとなり、elseが上書きされます$ch_forを上書きします。

+0

ああ申し訳ありませんが、私はあなたを取得しません。私が書く必要があることを私に見せることができますか? –

+0

あなたの '$ ch_for = '';'はループの最初の反復中に完全な配列を上書きします。 – ccKep

+0

ああ私はそれを修正しました。私はそれを持っている、ありがとう@ccKep :) –

1

あなたの配列は連想array.SOこの.Like array_keysin_array()を使用..です

<?php 
$array = array('ch7'=>'Seven','ch8'=>'Eight'); 

$keys = array_keys($array); 

//print_r($keys); 

for ($x=1; $x<=12; $x++) { 
    if( in_array('ch'.$x,$keys)) { 
     $sel = 'checked = "checked" '; 
     echo $array["ch{$x}"].PHP_EOL; 
    } else { 
     $sel = ''; 
     $ch_for = ''; 
    } 
}  

?> 

出力:

Seven 
Eight 
関連する問題