我有一个看起来像
的数组$articles = array([0] => array('title' => 'When ....',
'description' => '....',
'created' => '2011-02-21'
),
[1] => array('title' => 'Something ....',
'description' => 'When ....',
'created' => '2011-02-21'
),
);
我想只提取标题。无论如何在不使用for和foreach循环的情况下检索标题。我不介意标题变成单个字符串。我在想破坏数组,但是添加了描述并创建了。
答案 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'));
将仅提取数据库中所有匹配文章的标题。