Jak przekonwertować tablicę tablic lub obiektów na tablicę asocjacyjną?

Jestem przyzwyczajony do funkcji map () perla, gdzie wywołanie zwrotne może przypisać zarówno klucz, jak i wartość, tworząc w ten sposób tablicę asocjacyjną, w której dane wejściowe były płaską tablicą. jestem swiadomyarray_fill_keys() co może być przydatne, jeśli wszystko, co chcesz zrobić, to utworzyć skrót w stylu słownika, ale co jeśli niekoniecznie chcesz, aby wszystkie wartości były takie same? Oczywiście wszystkie rzeczy można zrobić za pomocą iteracji foreach, ale jakie są inne (być może bardziej eleganckie) metody?

Edytować: dodanie przykładu wyjaśniającego transformację. Nie przerywaj transformacji, pytanie dotyczy przekształcenia płaskiej listy w tablicę asocjacyjną, w której nie możemy założyć, że wszystkie wartości będą takie same.

$original_array: ('a', 'b', 'c', 'd')
$new_hash: ('a'=>'yes', 'b'=>'no', 'c'=>'yes', 'd'=>'no')

*note: the values in this example are arbitrary, governed by some business logic that is not really relevant to this question. For example, perhaps it's based on the even-oddness of the ordinal value of the key

Przykład świata rzeczywistego Tak więc, korzystając z dostarczonej tutaj odpowiedzi, oto jak możesz analizować przez $ _POST, aby uzyskać listę tylko tych pól wejściowych, które spełniają podane kryteria. Może to być przydatne, na przykład, jeśli masz dużo pól wejściowych w formularzu, ale pewna ich grupa musi być przetworzona razem.

W tym przypadku mam wiele pól wejściowych, które reprezentują odwzorowania do bazy danych. Każde z pól wejściowych wygląda tak:<input name="field-user_email" value="2" /> gdzie każdy z tego typu pól ma przedrostek „field-”.

chcemy najpierw uzyskać listę tylko tych pól wejściowych, które faktycznie zaczynają się od „field-”, a następnie chcemy utworzyć tablicę asocjacyjną o nazwie$mapped_fields który ma wyodrębnioną nazwę pola jako klucz i rzeczywistą wartość pola wejściowego jako wartość.

$mapped_fields = array_reduce( preg_grep( '/field-.+/', array_keys( $_POST ) ), function( $hash, $field ){ $hash[substr( $field, 6 )] = $_POST[$field]; return $hash; } );

Które wyjścia:

Array ( [date_of_birth] => 1 [user_email] => 2 [last_name] => 3 [first_name] => 4 [current_position] => 6 )

(Tak więc, aby uprzedzić przeciwników, pozwól mi zgodzić się, że ten kawałek kompaktowego kodu jest prawdopodobnie znacznie mniej czytelny niż prosta pętla, która iteruje przez $ _POST i dla każdego klucza sprawdza, czy ma on prefiks i czy tak, wyrzuca go i jego wartość na tablicę)

questionAnswers(3)

yourAnswerToTheQuestion