2022/7/18 技术细节之`continue`、查询相关以及`array_unique`

发布时间:2024-04-14 17:01

2022年7月18日

技术细节之continue、查询相关以及array_unique

(一)Q1:continue 后面的语句是否会执行?

答案:不会

例子:分离区间 [0-9] 之内的奇数与偶数

0,1=>2,2=>4,3=>6,4=>8]
var_dump($odd);         // [0=>1,1=>3,2=>5,3=>7]

// 调整一下语句 $even[] = $i 的位置,放到 continue 之后:
$even = $odd = [];
for($i=0;$i<9;$i++){
    if($i % 2 == 0){
        continue;
        $even[] = $i; 
    }
    $odd[] = $i; 
}
var_dump($even);        // []
var_dump($odd);         // [0=>1,1=>3,2=>5,3=>7]

分析:把 $even[] = $i 的位置,放到 continue 之后,存储偶数的数组就为空。即continue 之后的语句不会执行。

(二)Q2:查询相关
假如某条查询语句获取到了数据,但是有些字段的值为空,该用哪个函数去判断?

答案:用 empty

try{
    $pdo = new PDO("mysql:host=localhost;dbname=test;",'root','root');
    $pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
    $sql = "SELECT * FROM user WHERE id = ?";
    $stmt = $pdo->prepare($sql);
    $data = [];
    if($stmt->execute([21])){
        $data = $stmt->fetchAll(PDO::FETCH_ASSOC);
    }
    // var_dump($data);     // 二维数组 [0=>['id'=21,'name'=>'','age'=>0]]
    $re = [];
    foreach($data[0] as $v){
        if(!empty($v)){
            $re[] = $v;
        }
    }
    var_dump($re);          // [0=>'21']
}catch(PDOException $e){
    echo $e->getMessage();
}

如果某个字段未设置值,那么查询返回的结果中,该字段的值为空字符串

需要注意的是:

  • 如果是通过 PDOStament::fetchAll() 获取结果集中的数据,得到的是一个二维数组;
  • empty(0) 的结果为 true

ItVuer - 免责声明 - 关于我们 - 联系我们

本网站信息来源于互联网,如有侵权请联系:561261067@qq.com

桂ICP备16001015号