PHP array関数の[ ]内の値の表示
mySQLのデータベースでテーブルを作成、af1~af5のカラムには、に下記のように数値が入っているものと入っていないもの(NULL)があります。
af1 ='10'
af2 ='15'
af3 =''
af4 ='20'
af5 =''
【作りたいPHP】
数字が入っているカラムがあれば、そのカラム番号(af1なら1、af2なら2)のうちもっとも若い番号1つだけ抽出(上記のカラムであれば3)し、全てのカラムが埋まっていれば0を返すPHPを組みたいと考えています。
<?php
$a2 = array(
1=>$row_friend_name['af1'],
2=>$row_friend_name['af2'],
3=>$row_friend_name['af3'],
4=>$row_friend_name['af4'],
5=>$row_friend_name['af5'],
);
$empty = array_filter($a2, function($i){return !$i;});
var_dump($empty);
?>
上記のPHPを組んだところ、var_dumpの答えが
array(2) [3]=>NULL [5]=>NULL となります。
これを流用し、$emptyの中に[1]や[2]などの記号が入っているかどうかを見極めさせ、そこから1,2,3の数字(空きカラム)を導きだそうと考えました。
"array(2) [3]=>NULL [5]=>NULL"であれば、[1]や[2]を順番に探していき、最初に出てきた[3]を見つけて、'3'を表示させることになります。
*[3]* というワイルドカードを使ったlike検索のような形にしてみましたが、残念ながら検知してくれません。「見つからなかった」という意味の「0」が答えになっています。
マニュアルを何度も読見返したのですが、どうしても[3]=>NULL の3を抽出、表示する方法が分かりません。
大変お手数ですが対応方法についてご教授頂きたくお願い致します。
(なんとか自分で対応しようとしたのですが、納期と他の仕事の関係で、これ以上長時間勉強する時間がとれません。何卒宜しくお願い致します)
当方が作って検知出来なかったPHP
<?php
$a2 = array(
1=>$row_friend_name['af1'],
2=>$row_friend_name['af2'],
3=>$row_friend_name['af3'],
4=>$row_friend_name['af4'],
5=>$row_friend_name['af5'],
);
$empty = array_filter($a2, function($i){return !$i;});
if (in_array('*[1]*', $empty, true)) {
echo "'1\n";
}
elseif (in_array('*[2]*', $empty, true)) {
echo "2\n";
}
elseif (in_array('*[3]*', $empty, true)) {
echo "3\n";
}
elseif (in_array('*[4]*', $empty, true)) {
echo "4\n";
}
elseif (in_array('*[5]*', $empty, true)) {
echo "5\n";
}
else
{
echo "0\n";
}
?>
お礼
回答ありがとうございました。 何度も確認したら一部間違いがありなおしましたらしっかり動いてくれるようになりました。 ありがとうございました。