To a typical array structure:Czy istnieje elegancki sposób na zredukowanie struktury do prostej tablicy?
$s = array ('etc'=>'etc', 'fields' =>
array (
0 => array (
'name'=>'year', 'description'=>'Year of ...', 'type'=>'integer',
),
1 => array (
'name'=>'label', 'description'=>'Offical short name', type'=>'string',
),
2 => array (
'name' => 'xx', 'description' => 'Xx ...', 'type' => 'string',
)
));
Oto non-elegancki sposób (lub "nie tak elegancki sposób"), aby zmniejszyć dużą tablicę do prostego tablicę zawierającą tylko jedną kolumnę:
$fields = array();
foreach ($strut['resources'][0]['schema']['fields'] as $r)
$fields[] = $r['name'];
To działa, ale czy można zrobić to samo za pomocą tylko jednej instrukcji? Być może używając jak array_reduce()
, ale nie widzę jak.
Oto inny "problem elegancja PHP" typowy:
$fieldsByName = array();
foreach ($strut['resources'][0]['schema']['fields'] as $r)
$fields[$r['name']] = array(
'description' =>$r['description'],
'type' =>$r['type']
);
Czy istnieje alternatywa PHP? Chodzi o to, aby użyć słowa kluczowego (name
w przykładzie) jako klucz tablicy i inne elementy jak zwykle pól, tak, rodzajowy non-elegancki algorytm jest
$fieldsByName = array();
foreach ($strut['resources'][0]['schema']['fields'] as $r){
$key = $r['name'];
unset($r['name']);
$fields[$key] = $r;
}
Zgadzam się z tobą ,, powinniśmy uprościć problem, tak jak potrzebujemy wszystkich tablic podrzędnych wewnątrz głównej tablicy, która ma "imię" jako klucz –
dzięki, byłeś szybki i precyzyjny (!) ... Jakiś dobry trop do drugi problem? –
@PeterKrauss Drugi problem będzie wymagać więcej wywołań funkcji ... nie ma nic wbudowanego tylko do tego. Ale ładną jedną linijką byłoby '$ fields = array_combine (array_column ($ your_array, 'name'), array_map (function ($ array) {return array_diff_key ($ array, [" name "=> 1]);}, $ your_array)); '. - I tak ... musisz iterować w jakiś sposób przez tę tablicę ... przez foreach lub tablicę_mapową ... nie ma znaczenia. Nie ma nic wbudowanego, aby uzyskać tablicę bez określonego klucza (np. Kolumna_kolumna, tylko że nie zwraca ona całego tego indeksu, ale wszystkie bez tego indeksu). W tym przypadku jesteś naprawdę lepszy dzięki foreach ... – bwoebi