###実現したいこと
SHOW COLUMNS FROM {$table}
したカラムとして、以下$col_wrapper
があります。
ここから「Nullが許容されているカラム名」を配列で取得したいです。
php
1// 実現したい取得結果 2$result = ["service_id","kind_id"];
###該当のソースコード
テーブルの「カラム情報」です。
php
1$col_wrapper = array ( 2 0 => 3 array ( 4 'Field' => 'ID', 5 'Type' => 'bigint(20) unsigned', 6 'Null' => 'NO', 7 'Key' => 'PRI', 8 'Default' => NULL, 9 'Extra' => 'auto_increment', 10 ), 11 1 => 12 array ( 13 'Field' => 'service_id', 14 'Type' => 'tinyint(3) unsigned', 15 'Null' => 'YES', 16 'Key' => '', 17 'Default' => NULL, 18 'Extra' => '', 19 ), 20 2 => 21 array ( 22 'Field' => 'kind_id', 23 'Type' => 'tinyint(3) unsigned', 24 'Null' => 'YES', 25 'Key' => '', 26 'Default' => NULL, 27 'Extra' => '', 28 ) 29); 30
###発生している問題
「カラム名」でなく「カラム情報」がすべて取得されてしまいます。
###試したこと
基本的にarray_filter
を使っての実現を求めています。
しかし以下で問題が発生します。
php
11 $result = array_filter($col_wrapper, function($col_info) { 22 33 if( $col_info['Null'] === 'YES' ) { return $col_info['Field']; } 44 }); 55 var_dump($result);
できない理由がわからず、以下のようにひとまずダンプしましたが、余計わからなくなりました。
php
11 $result = array_filter($col_wrapper, function($col_info) { 22 var_dump($col_info); // ひとまずダンプ 33 if( $col_info['Null'] === 'YES' ) { return $col_info['Field']; } 44 }); 55 //var_dump($result);
2行目のダンプの結果は次の通りで、これがダンプされるならば、3行目の$col_info['Field']
はダンプの['Field']
と一致するはずです。
それなのにどうして、上記$result
は「カラム名」でなく「カラム情報」がすべて取得されることになるのでしょうか?
returnしているのは「カラム情報」でなく$col_info['Field']
の「カラム名」のはずと思うのですが。
PHP
1array(6) { 2 ["Field"]=> 3 string(2) "ID" 4 ["Type"]=> 5 string(19) "bigint(20) unsigned" 6 ["Null"]=> 7 string(2) "NO" 8 ["Key"]=> 9 string(3) "PRI" 10 ["Default"]=> 11 NULL 12 ["Extra"]=> 13 string(14) "auto_increment" 14} 15array(6) { 16 ["Field"]=> 17 string(10) "service_id" 18 ["Type"]=> 19 string(19) "tinyint(3) unsigned" 20 ["Null"]=> 21 string(3) "YES" 22 ["Key"]=> 23 string(0) "" 24 ["Default"]=> 25 NULL 26 ["Extra"]=> 27 string(0) "" 28} 29array(6) { 30 ["Field"]=> 31 string(7) "kind_id" 32 ["Type"]=> 33 string(19) "tinyint(3) unsigned" 34 ["Null"]=> 35 string(3) "YES" 36 ["Key"]=> 37 string(0) "" 38 ["Default"]=> 39 NULL 40 ["Extra"]=> 41 string(0) "" 42} 43
回答2件
あなたの回答
tips
プレビュー