代码之家  ›  专栏  ›  技术社区  ›  qadenza

以更可读的方式过滤和打印数组

  •  -1
  • qadenza  · 技术社区  · 6 年前
    $sql = "select * from banners where bgroup > ''";
    $st = $db->prepare($sql);
    $st->execute();
    $data = $st->fetchAll();
    print_r($data);
    

    结果(多维数组):

    Array ( 
        [0] => Array ( 
                [id] => 59 
                [0] => 59 
                [date] => 2018-11-23 23:44:47 
                [1] => 2018-11-23 23:44:47 
                [src] => banners/5b5ccafff3f6a.jpg 
                [2] => banners/5b5ccafff3f6a.jpg 
                [name] => abc 
                [3] => abc 
        ) 
        [1] => Array... 
        [2] => Array...
    

    我想过滤上面的内容-只得到那些子数组 name = abc 打印时不带索引,用新行分隔。

    这样地:

    Array(
        Array{
            [id] => 59
            [date] => 2018-11-23 23:44:47
    

    有什么帮助吗?

    2 回复  |  直到 6 年前
        1
  •  1
  •   Death-is-the-real-truth    6 年前

    您需要更改查询和提取模式以直接获得所需的输出:

    $st = $db->prepare("SELECT * from banners WHERE name = ? AND bgroup > ''");
    $st->execute(array('abc'));
    $data = $st->fetchAll(PDO::FETCH_ASSOC);
    print_r($data);
    

    注:-使用 prepared statements 完全正确。

    参考: PDOStatement::fetchAll

        2
  •  1
  •   oreopot    6 年前

    方式1: 将SQL查询修改为如下所示:

    $sql = "select * from banners where name='abc' AND bgroup > ''";
    

    方法2(比上述方法效率低):

    $newArr = [];
    
    foreach($results as $result)
    {
        if($result['name'] == 'abc')
        {
            $newArr[] = $result;   
        }
    }
    
    echo "<pre>";
    print_r($newArr);