teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

ぜんぜんちがってた

2018/10/25 01:48

投稿

papinianus
papinianus

スコア12705

answer CHANGED
@@ -1,11 +1,37 @@
1
- やりたいのは、zipですかね。長いほうにあわせられて、足りないのは、nullになりますが。
1
+ 全面改訂
2
2
 
3
+ ## ご検討いただきたい点
4
+ * 描画時にロジックを判断している→描画は表示用のデータを出すだけ。値を加工して"checked"にすることは妥当だが、このidが別の配列に入っているか、みたいな判断は事前に解決すべき
5
+ * DBから取得したっぽい配列だが、であればDB上でJOINしたほうが早い→今はphpでDBのjoinをしているようなもので、バグを生じやすいうえに、性能もよくない
6
+
7
+ ## 現状のまま直すとしたら
8
+ 幸いなことに質問日の時点でサポートされているのはPHP5.6以上。つまり、DBっぽいデータをハンドルするなら[array_column (PHP 5 >= 5.5.0, PHP 7)](https://secure.php.net/manual/ja/function.array-column.php)が使えます。
9
+
3
10
  ```php
11
+ <?php
12
+ $result_info = [
4
- $a = ["a", "b", "c"];
13
+ ['user_id' => '0014'],
14
+ ['user_id' => '1234'],
15
+ ['user_id' => '2222'],
16
+ ['user_id' => '3333'],
17
+ ];
18
+ //var_export($result_info);
5
- $b = [1, 2, 3, 4];
19
+ $result_up = [
20
+ ['user_min' => 'あああ', 'user_id'=>'0014'],
21
+ ['user_min' => 'いいい', 'user_id'=>'1234'],
22
+ ['user_min' => 'ううう', 'user_id'=>'2222'],
23
+ ['user_min' => 'えええ', 'user_id'=>'3333'],
24
+ ['user_min' => 'おおお', 'user_id'=>'9999'],
25
+ ];
6
- $zip = array_map(null, $a, $b);
26
+ //var_export($result_up);
27
+
28
+ $who_has_schedule = array_column($result_info, 'user_id');
29
+ $ordered_user_list = array_column($result_up, null, 'user_id');
30
+ //var_export($uids);
31
+ //var_export($user_list);
7
- foreach($zip as $pair) {
32
+ foreach($ordered_user_list as $id => $row) {
33
+ echo "<input type='checkbox' name='user_id[]' value='{$id}' id='{$id}'".(in_array($id, $who_has_schedule, false)?" checked ":"").">";
34
+ echo "<label for='{$id}'>{$row['user_min']}</label>";
8
- echo $pair[0];
35
+ echo PHP_EOL;
9
- echo $pair[1];
10
36
  }
11
37
  ```