是否有一种内置方法可以从 PHP 中的多暗淡数组中获取数组?

Posted

技术标签:

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

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

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

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

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

【问题讨论】:

【参考方案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'] .. :)

以上是关于是否有一种内置方法可以从 PHP 中的多暗淡数组中获取数组?的主要内容,如果未能解决你的问题,请参考以下文章

Bigquery:是不是有一种 json 路径方法可以仅从具有动态键的 json 数组中提取值?

是否有一种内置方法可以在没有任何查询参数的情况下获取当前 URL?

ListView,是不是有一种简单的方法可以允许在内部拖动项目(内置)?

如何从 C# 数组中返回唯一元素

php 数组索引值如何重新从0开始递增

数据表中的多选行,如何从JSON获取一列数据到php