0

次のコードがあります。

  foreach ($result as $row) {
$categories[] = array('id' => $row['id'], 'name' => $row['name']);
if($categories['id'] = $selectedcategory ){ 
    $categories['selected'] = 'true'; 
}

これにより、クエリからのすべての ID と名前を含む配列が作成されます。そして、それは大丈夫です。特定の値 ($selectedcategory) に対してチェックを行い、値が「true」の「selected」キーを追加します。

$categories に print_r を実行すると、次のようになります。

Array ( [0] => Array ( [id] => 1 [name] => Expertise ) [selected] => true [1] => Array ( [id] => 2 [name] => Tools ) [2 ] => Array ( [id] => 3 [name] => On the go ) [3] => Array ( [id] => 4 [name] => Lab ) [4] => Array ( [id] => 5 [名前] => ノウハウ ) ) 

選択したキーを正しい ID 値 (1) に配置しますが、配列 0 ブラケットの外に配置されます。

私は何を間違っていますか?

4

3 に答える 3

1

[] を使用して配列に要素を追加すると、この配列に新しい位置が作成され、その中にすべての情報が追加されます。

$categories[] = array('id' => $row['id'], 'name' => $row['name']);  

これは、$categories[$pos] には ID と名前で作成した配列が含まれていることを意味します。このインデックスは存在しないため、$categories['id'] と比較することはできません。これと比較する必要があります。

$categories[$pos]['id']  

このためには、新しい配列を追加した位置を知るか、それが最後の配列要素であると想定する必要があります

更新:ここに@mezeの提案を含むコード例があります

foreach ($result as $row) {
  $tmp = array('id' => $row['id'], 'name' => $row['name']);
  if($tmp['id'] == $selectedcategory ){ 
    $tmp['selected'] = 'true'; 
  }  
  $categories[] = $tmp;  
}
于 2013-09-06T10:21:48.640 に答える
1

あなたの if 条件が間違っている、

あなたは単一の=を使用しています

そのはず

if($categories['id'] == $selectedcategory ){ 
    $categories['selected'] = 'true'; 
}
于 2013-09-06T10:16:17.930 に答える