skip to Main Content

I have multiple variables and i need to check if all of these variables are set or not "0". So all of these variables need to have a value.

The values i get from WordPress ACF:

$p1 = get_field( "wert", $s1 );
$p2 = get_field( "wert", $s2 );
$p3 = get_field( "wert", $s3 );
$p4 = get_field( "wert", $s4 );
$p5 = get_field( "wert", $s5 );
$p6 = get_field( "wert", $s6 );
$p7 = get_field( "wert", $s7 );
$p8 = get_field( "wert", $s8 );
$p9 = get_field( "wert", $s9 );
$p10 = get_field( "wert", $s10 );

No i need to check if all of them have a value. I do this with an if statement:

if($s1 && $s2 && $s3 && $s4 && $s5 && $s6 && $s7 && $s8 && $s9 && $s10) {
   // MY CODE
}

But when i do this i still execute the script when one of the variables is "0". How can i check this as short as possible?

Thank you so much!

3

Answers


  1. Your check is checking the $s variables and this is not the value of the fields, which are stored in $p variables.

    Login or Signup to reply.
  2. You can convert variables to array, and check with in_array:

    $p1 = get_field( "wert", $s1 );
    $p2 = get_field( "wert", $s2 );
    $p3 = get_field( "wert", $s3 );
    $p4 = get_field( "wert", $s4 );
    $p5 = get_field( "wert", $s5 );
    $p6 = get_field( "wert", $s6 );
    $p7 = get_field( "wert", $s7 );
    $p8 = get_field( "wert", $s8 );
    $p9 = get_field( "wert", $s9 );
    $p10 = get_field( "wert", $s10 );
    
    $check = [$p1, $p2, $p3, $p4, $p5, $p6, $p7, $p8, $p9, $p10];
    
    
    if (in_array(0, $check)) {
        echo "Got 0";
    }else {
        echo "No 0";
    } 
    
    Login or Signup to reply.
  3. Having such an amount of variables is no good practice. You should use arrays for that.

    When you know how many fields need to be positive, you can just count them.

    $values = [];
    $max    = 10;
    for ($i = 1; $i <= $max; $i++) {
        $values[] = get_field('wert', ${"s$i"});
    }
    
    $filled = array_reduce($values, fn($carry, $value) => $carry += (isset($value) && $value != 0) ? 1 : 0, 0);
    if ($filled !== $max) {
        echo "Only $filled of $max are filled";
    }
    
    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search