【问题标题】:Is there a built in way to get an array out of multi dim array in PHP?是否有一种内置方法可以从 PHP 中的多暗淡数组中获取数组?
【发布时间】:2011-01-13 14:09:59
【问题描述】:

(查询数据库时非常有用)。
如果我有一个多暗数组

 [['id'=>1],['id'=>2],['id'=>34],['id'=>67]]

而我想要的是[1,2,34,67]

我知道如何在代码中执行此操作,只是询问 PHP(或可能在 PDO 中)是否有内置方式来执行此操作。

【问题讨论】:

    标签: php arrays pdo flatten


    【解决方案1】:

    我认为你需要fetchAll 中的PDO::FETCH_COLUMN 模式,它只返回一列作为数组:

    <?php
    $sth = $dbh->prepare("SELECT name, colour FROM fruit");
    $sth->execute();
    
    /* Fetch all of the values of the first column */
    $result = $sth->fetchAll(PDO::FETCH_COLUMN, 0);
    var_dump($result);
    ?>
    

    来自the manual

    要返回由结果集中单个列的所有值组成的数组,请指定 PDO::FETCH_COLUMN。您可以使用 column-index 参数指定您想要的列。

    【讨论】:

      【解决方案2】:

      一个非常简单的方法是展平你的多维数组

      此代码提取自http://php.net/manual/en/function.array-values.php

      <?php 
        function array_flatten($array, $flat = false) 
        { 
          if (!is_array($array) || empty($array)) return ''; 
          if (empty($flat)) $flat = array(); 
      
          foreach ($array as $key => $val) { 
            if (is_array($val)) $flat = array_flatten($val, $flat); 
            else $flat[] = $val; 
          } 
      
          return $flat; 
        } 
      
        // will get your flattened array
        print_r( array_flatten( $vals ) );
      ?>
      

      【讨论】:

      • 在这里发布。这就是方法。似乎没有内置函数。
      • 这不是问题的答案,OP 要求 PHP 或 PDO 中的内置方式,而 PDO 中有一种方式。请参阅 Ivan Nevostruev 的回答。
      【解决方案3】:

      也许array_values(array_values($array));

      【讨论】:

        【解决方案4】:

        你能不能只做你想要的数组?

        $old = array( array( 'id'=>1 ), array( 'id'=>2 ), array( 'id'=>34 ), array( 'id'=>67 ) );
        $arr = array();
        foreach( $old as $item ) {
            $arr[] = $item['id'];
        }
        
        //$arr = [ 1, 2, 34, 67 ];
        

        【讨论】:

        • PHP 中不能使用[] 设置数组
        • -1:他说的是multi dim array,如果层次更深,你会怎么做foreach循环?
        • @juraj.blahunka - Harmen 是对的,第一行是不合法的 PHP(它的伪代码;))@sarfraz-ahmed - 你什么时候从数据库结果?
        • @Sarfraz Ahmed 抱歉,我没有注意第一行 :-D 我指的是$arr[] = $item['id'] .. :)
        猜你喜欢
        • 1970-01-01
        • 2019-08-15
        • 1970-01-01
        • 2010-11-17
        • 1970-01-01
        • 2014-06-23
        • 2013-02-15
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多