私は、コールバックがキーと値の両方を割り当てることができるperlのmap()関数に慣れています。そのため、入力がフラットな配列だった連想配列が作成されます。私はarray_fill_keys()
を知っています。これは、辞書スタイルのハッシュを作成するだけの場合に便利ですが、必ずしもすべての値を同じにする必要がない場合はどうしたらいいですか?明らかにすべてのことはforeach反復で行うことができますが、他の(おそらくよりエレガントな)メソッドは存在しますか?配列またはオブジェクトの配列を連想配列に変換するにはどうすればよいですか?
:変換を明確にするための例を追加してください。変換でハングアップしないでください。問題は、フラットリストをハッシュに変換することです。ここでは、すべての値が同じであるとは仮定できません。
$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
実世界の例 だから、ここに提供された答えを使用して、ここで指定した条件に一致するのみの入力フィールドのリストを取得するには$ _POSTのを解析できる方法です。たとえば、フォームに多くの入力フィールドがあるが、それらの特定のグループを一緒に処理する必要がある場合など、これは便利です。
この場合、データベースへのマッピングを表すいくつかの入力フィールドがあります。各入力フィールドは次のようになります。 <input name="field-user_email" value="2" />
このフィールドの各フィールドには、「field-」という接頭辞が付きます。
実際に "field-"で始まる入力フィールドのリストを取得してから、抽出したフィールド名をキーとして持つ$mapped_fields
という連想配列を作成し、値としての実際の入力フィールドの値
$mapped_fields = array_reduce(preg_grep('/field-.+/', array_keys($_POST)), function($hash, $field){ $hash[substr($field, 6)] = $_POST[$field]; return $hash; });
:
Array ([date_of_birth] => 1 [user_email] => 2 [last_name] => 3 [first_name] => 4 [current_position] => 6)
を(だから、私だけは、コンパクトなコードのこのビットは、$ _POSTて単純なループ反復することそれは間違いなくはるかに少ない読み取り可能であることに同意しましょう、否定派を未然に防ぐためにキーごとにプレフィックスがあるかどうかを確認し、そうであれば、その値を配列にポップします)
'print_r'や' var_dump'を使って配列のダンプを投稿できますか? – Florent
@Florent done ... –