【PHP】連想配列の値が全部空だったらfalseを返す

  • URLをコピーしました!

WordPressのAdvanced Custom Fieldsのグループブロックで、すべてのサブフィールドの値が空のときにfalseがほしい!というときに使える、「連想配列の値がすべて空だったらfalseを返す方法」をご紹介します!

目次

先に結論

array_filter() を使う。

$group_judge = array_filter($testgroup);
if($group_judge){
}

※直接 if(array_filter($group)) としても動く気がする

Advanced Custom Fieldsで「グループ」を使ったときに使える

WordPressのAdvanced Custom Fieldsで「グループ」を使ってフィールドをグルーピングした時のこと。
入力がないときは、値の周りのHTMLタグも出したくないとします。

<?php $test01 = get_field('test01'); ?>
<?php $test02 = get_field('test02'); ?>
<?php $testgroup = get_field('test-group'); ?>
<?php if ($test01): ?>
    <p>
        テスト01:<?php echo $test01; ?>
    </p>
<?php endif; ?>
<?php if ($test02): ?>
    <p>
        テスト02:<?php echo $test02; ?>
    </p>
<?php endif; ?>
<?php if ($testgroup)://★サブフィールドの値の有無を確認したいけど動かない!★ ?>
    <div>
        <h2>グループ</h2>
        <?php if ($testgroup['sub01']): ?>
            <p>
                サブフィールド1:<?php echo $testgroup['sub01']; ?>
            </p>
        <?php endif; ?>
        <?php if ($testgroup['sub02']): ?>
            <p>
                サブフィールド2:<?php echo $testgroup['sub02']; ?>
            </p>
        <?php endif; ?>
    </div>
<?php endif; ?>

でもこれだと動きません消えません。値がないとき、こんな感じの残念な仕上がりに。

<div>
    <h2>グループ</h2>
</div>

if(get_field(‘[サブフィールド名]’))がfalseにならない理由

var_dump() で中身を見てみると…まずはarray(配列)になっていて、中身が2個入っています。
それぞれの値は空でもキーのほうは存在するので、中身が2個ある扱いになります。

array (size=2)
  'sub01' => string '' (length=0)
  'sub02' => string '' (length=0)

つまり空ではないので、空かどうかの判定をしようとしてもできないわけです。

グループ内のサブフィールドすべてに値がなかったら空だということにしたい

すべてのサブフィールドに値がなかったら空だということにするために、配列操作用の関数を使います。

array_filter()

基本的な使い方は以下の通り。

$original_arr = [1,2,3,4,5,6];

//$original_arr をもとに、$new_arrを作る
//各値を$numとして $num>3 が trueになるものだけ、新しい配列に入れる
$new_arr = array_filter($original_arr,function($num){
    return ($num>3);
});

print_r($original_arr);
// → Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 [4] => 5 [5] => 6 )

print_r($new_arr);
// → Array ( [3] => 4 [4] => 5 [5] => 6 )

 

ただ、今回は第2引数を使わずに array_filter($array) の形で使います。

//$testgroup をもとに、$group_judgeを作る
//各値が存在すればtrue、空ならfalseの扱いになる
//trueになるものだけ、新しい配列に入れる
$group_judge = array_filter($testgroup);

このようにすると、サブフィールドの値がすべて空の場合、新しい配列の中身は完全に空になります。
もちろん、値が入っているサブフィールドがあれば、それは新しい配列に入ります。

連想配列の値がすべて空だったらfalseを返したいときは array_filter()を使う

つまり以下のコードですべてのサブフィールドの値が空ならfalseという条件分岐ができるというわけです!

$group_judge = array_filter($testgroup);
if($group_judge){
}
よかったらシェアしてね!
  • URLをコピーしました!

コメント

コメントする

コメントは日本語で入力してください。(スパム対策)

CAPTCHA

目次