2010-06-01 3 views
2

Quelque chose qui me tracasse depuis longtemps:façon élégante pour extraire des valeurs de tableau

Je veux convertir ce tableau:

// $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" 
    },  
} 

Pour ce formulaire:

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

actuellement i utilise ce code:

$extractedTags = array(); 

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

Y at-il une façon plus élégante de le faire, peut-être une fonction intégrée PHP?

+0

Vous pouvez utiliser 'array_filter' en utilisant une fonction de rappel, mais c'est probablement moins élégante que la solution que vous avez. Je resterais probablement avec ce que tu as. –

+0

Comme mes mesures sur le http://stackoverflow.com/questions/2939189/php-multi-dimensional-array-manipulation/2939204#2939204 dupliquer montrent la méthode la plus rapide de faire ce que vous voulez est le foreach. Les 'array_map' et' array_filter' ont un surcoût énorme car ils ont besoin d'appeler une fonction définie par l'utilisateur pour chaque élément. –

+0

Je viens d'ajouter cette proposition pour PHP 5.5: https://wiki.php.net/rfc/array_column - fait exactement ce que j'ai demandé. – smoove

Répondre

1

Vous pouvez utiliser array_map avec 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

Merci pour votre réponse Alexander. Actuellement, je dois encore utiliser PHP 5.2, et l'appel de create_function rend l'IMHO encore moins élégant. Quand je passerai à PHP 5.3, j'utiliserai la méthode array_map. – smoove

+0

Vous pouvez prédéfinir la fonction, puis passer une chaîne comme premier paramètre dans 'array_map()'. Notez cependant que array_map() est lent par rapport à un simple foreach. –

Questions connexes