Как извлечь отдельные поля из массива - PullRequest
2 голосов
/ 24 февраля 2011

У меня есть массив, который выглядит

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

Я хочу извлечь только заголовки.Есть ли в любом случае получить названия без использования циклов for и foreach.Я не против, что название становится одной строкой.Я думал взорвать массив, но это добавляет описание и создал.

Ответы [ 7 ]

10 голосов
/ 24 февраля 2011

с учетом CakePHP, $titles = Set::extract('/title', $articles);

edit:

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

Обновление:

В CakePHP 2.x Hash заменен Set.

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

8 голосов
/ 24 февраля 2011

Вы можете использовать, например, 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);
5 голосов
/ 24 февраля 2011

Вы можете использовать это

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

РЕДАКТИРОВАТЬ:

Предположение: если title является первым элементом массива.

1 голос
/ 22 декабря 2014

начиная с 5.5, array_column делает именно то, что вы объяснили.

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

Для получения дополнительных примеров проверьте Руководство по PHP

0 голосов
/ 24 февраля 2011

Эй, поскольку вы используете CakePHP, почему бы вам просто не добавить title в массив fields в вашем find()? Например, следующее,

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

будет извлекать только заголовки всех соответствующих статей в базе данных.

0 голосов
/ 24 февраля 2011

улучшенная версия ответа KingCrunch:

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

это довольно универсальная функция, которую можно поместить в некоторую библиотеку, а затем вызвать только одной строкой, которая короче, чем в любом другом ответе:

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

Обновление
Тем не менее, кажется, что торт уже имеет такую ​​функцию, поэтому единственный правильный ответ Как извлечь отдельные поля из массива

0 голосов
/ 24 февраля 2011

А как насчет циклов while?

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