2010-06-01 2 views
2

Что-то, что ошибки меня долгое время:элегантный способ извлечения значений из массива

Я хочу, чтобы преобразовать этот массив:

// $article['Tags'] 
array(3) { 
    [0] => array(2) { 
    ["id"] => string(4) "1" 
    ["tag"] => string(5) "tag1" 
    }, 
    [1] => array(2) { 
    ["id"] => string(4) "2" 
    ["tag"] => string(5) "tag2" 
    }, 
    [2] => array(2) { 
    ["id"] => string(4) "3" 
    ["tag"] => string(5) "tag3" 
    },  
} 

Для этой формы:

// $extractedTags[] 
array(3) { 
    [0] => string(4) "tag1", 
    [1] => string(4) "tag2", 
    [2] => string(4) "tag3", 
} 

В настоящее время я используя этот код:

$extractedTags = array(); 

foreach ($article['Tags'] as $tags) { 
    $extractedTags[] = $tags['tag']; 
} 

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

+0

Вы можете использовать 'array_filter', используя функцию обратного вызова, но это, вероятно, менее элегантно, чем решение, которое вы имеете. Я, наверное, придерживаюсь того, что у тебя есть. –

+0

Как мои показатели по дублированию http://stackoverflow.com/questions/2939189/php-multi-dimensional-array-manipulation/2939204#2939204 показывают самый быстрый способ делать то, что вы хотите, это foreach. У массивов 'array_map' и' array_filter' есть огромные накладные расходы, так как они должны вызывать определенную пользователем функцию для каждого элемента. –

+0

Я просто добавляю это предложение для php 5.5: https://wiki.php.net/rfc/array_column - делает именно то, что я просил. – smoove

ответ

1

Вы можете использовать array_map с anonymous functions:

// PHP 5.2 
$extractedTags = array_map(create_function('$a', 'return $a["tag"];'), $article['Tags']); 

// PHP 5.3 
$extractedTags = array_map(function($a) { return $a['tag']; }, $article['Tags']); 
+0

Спасибо за ваш ответ Александр. В настоящее время мне все еще нужно использовать PHP 5.2, а вызов create_function делает его IMHO еще менее изящным. Когда я переключаюсь на PHP 5.3, я обязательно использую метод array_map. – smoove

+0

Вы можете предопределить функцию, а затем передать строку в качестве первого параметра в 'array_map()'. Однако обратите внимание, что array_map() медленнее по сравнению с простым foreach. –

Смежные вопросы