【问题标题】:How to use SWITCH statement in PHP when checking if variables not empty?检查变量是否为空时如何在PHP中使用SWITCH语句?
【发布时间】:2020-10-24 14:02:07
【问题描述】:

我已经写了 IF 语句来检查变量是否为空:

  if ( !empty( $firstname )) {
    $data = array_merge( $data, array( 'first_name' => $firstname )); 
  }
  if ( !empty( $lastname )) {
    $data = array_merge( $data, array( 'last_name' => $lastname )); 
  }
  if ( !empty( $email )) {
    $data = array_merge( $data, array( 'email' => $email )); 
  }
  // and there are even more statements then these 3 ...

我认为这太干了,并尝试使用 SWITCH 而不是 IF:

switch( true ){
  case ( !empty( $firstname )):
    $data = array_merge( $data, array( 'first_name' => $firstname ));
  case ( !empty( $lastname )):
    $data = array_merge( $data, array( 'last_name' => $lastname ));
  case ( !empty( $email )):
    $data = array_merge( $data, array( 'email' => $email ));

最后,即使其中一个变量为空,我也会合并所有这 3 个元素的数组。我做错了什么?

附:我不能做IF(!empty(a) && !empty(b) && !empty(c)),因为需要分别检查每个条件。

【问题讨论】:

  • $firstname 是一个数组吗?
  • 据我所知,所有情况都需要休息,根据手册php.net/manual/en/control-structures.switch.php
  • 另外,将所有这些检查移到一个 switch 语句中并不比 ifs 更干,你仍然把它们全部写出来。 DRY 表示 Don't Repeat Yourself,这意味着不要重复执行相同的 if 语句,不要有很多 if 语句
  • @Domaru 这就是 switch 语句的重点
  • 您可以尝试一个简单的compact x array_filter 解决方案,就像我在下面给出的那样!

标签: php switch-statement


【解决方案1】:

一个简单的解决方案是

$data = array_merge($data, array_filter(compact("firstname", "lastname", "email")));

Compact 是一个方便的函数,可以将变量名列表转换为其值的数组。数组过滤器会删除所有空元素,最后你可以将它与$data合并

【讨论】:

  • 谢谢!非常聪明的解决方案:)
【解决方案2】:

只是出于兴趣,我测试了您的代码,因为我对您最后所做的评论感到好奇,说即使变量为空,它仍然包含在开关中。我测试过了

    $firstname = '';//also tested with $firstname = null;
    $lastname = 'joe';
    $email = 'joe@null.com';
    $data = [];
    switch( true ){
      case ( !empty( $firstname )):
        $data = array_merge( $data, array( 'first_name' => $firstname ));
      case ( !empty( $lastname )):
        $data = array_merge( $data, array( 'last_name' => $lastname ));
      case ( !empty( $email )):
        $data = array_merge( $data, array( 'email' => $email ));
    }
    print_r($data);

输出是:

Array ( [last_name] => joe [email] => joe@null.com )

这是我所期望的 - 我只是添加这个,因为我认为你可能有你认为是空的变量,但不是。因此,在实施已经发布的解决方案之前,请确保您还检查您的变量是否处于您认为的状态

【讨论】:

    【解决方案3】:

    您可以通过使用可变变量来循环和测试而不为空。

    <?php
    $firstname = 'Paul';
    $email     = 'paul@example.com';
    
    $data = ['age' => '34'];
    foreach(['firstname', 'lastname', 'email'] as $name) {
        if(!empty($$name)) {
            $data[$name] = $$name;
        }
    }
    
    var_export($data);
    

    输出:

    array (
    'age' => '34',
    'firstname' => 'Paul',
    'email' => 'paul@example.com',
    )
    

    【讨论】:

      【解决方案4】:

      compact 函数与array_filter 一起使用是一种足够好的方法。我只是分享一种使用三元运算符来解决问题的替代方法。

      $data = !empty($firstname) ? array_merge( $data , [ 'firstname' => $firstname] ) : $data;
      $data = !empty($lastname)  ? array_merge( $data , [ 'lastname' => $lastname]  ) : $data;
      $data = !empty($email)  ? array_merge( $data , [ 'email' => $email] ) : $data;
      
       
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-05-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-04-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多