如何从数组中提取特定字段

时间:2011-02-24 10:54:44

标签: php arrays cakephp multidimensional-array foreach

我有一个看起来像

的数组
$articles = array([0] => array('title' => 'When ....',
                               'description' => '....', 
                               'created' => '2011-02-21'
                              ), 
                  [1] => array('title' => 'Something ....',
                               'description' => 'When ....', 
                               'created' => '2011-02-21'
                              ),
            );

我想只提取标题。无论如何在不使用for和foreach循环的情况下检索标题。我不介意标题变成单个字符串。我在想破坏数组,但是添加了描述并创建了。

7 个答案:

答案 0 :(得分:10)

考虑其CakePHP,$titles = Set::extract('/title', $articles);

编辑:

http://book.cakephp.org/view/1487/Set

更新

使用CakePHP 2.x Hash取代了Set。

$titles = Hash::extract($articles, '{n}.title');

答案 1 :(得分:8)

您可以使用例如array_map,但为什么不想使用循环?事实上,每个能够以你想要的方式修改数组的方法都会迭代它。

function reduce_to_title ($item) {
  return $item['title'];
};
$titles = array_map('reduce_to_title', $articles);

或者因为PHP> = 5.3

$titles = array_map(function ($item) {
  return $item['title'];
}, $articles);

答案 2 :(得分:5)

你可以用这个

print_r(array_map('array_shift', $articles));

编辑:

假设:如果title是数组的第一个元素。

答案 3 :(得分:1)

从5.5开始,array_column完全按照你的解释。

$titles = array_column($articles, "title"); // [0=>"When",1=>"Something"]

有关更多示例,请查看the PHP manual

答案 4 :(得分:0)

while循环怎么样?

reset($articles); while($a = each($articles)){echo $a['value']['title'];}

答案 5 :(得分:0)

KingCrunch答案的改进版本:

function get_column(&$array,$column) {
  foreach ($array as $value) {
    $ret[]=$value[$column];
  }
  return $ret;
}

这是非常通用的功能,可以放入某个库,然后只用一行调用,这比其他每个答案都短:

$titles = get_column($articles, 'title');

<强>更新
然而,似乎蛋糕已经具有这样的功能,所以,唯一正确的答案是 How to extract particular fields from an array

答案 6 :(得分:0)

嘿,既然您正在使用CakePHP,那么为什么不将title添加到fields中的find()数组?例如,以下,

$this->Article-find('all', array('fields'=>'Article.title'));

将仅提取数据库中所有匹配文章的标题。