php – 如何将数组或对象数组转换为关联数组?

前端之家收集整理的这篇文章主要介绍了php – 如何将数组或对象数组转换为关联数组?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我习惯于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 )

(所以,只是为了防止naysayers,让我同意这一点紧凑的代码可以说是一个很少的可读性,一个循环遍历$_POST的简单循环,对于每个键,检查它是否有前缀,如果所以,将它和它的值弹出到一个数组)

前几天我有完全相同的问题.这是不可能使用array_map,但 array_reduce做的伎俩.
$arr = array('a','d');
$assoc_arr = array_reduce($arr,function ($result,$item) {
    $result[$item] = (($item == 'a') || ($item == 'c')) ? 'yes' : 'no';
    return $result;
},array());
var_dump($assoc_arr);

结果:

array(4){[“a”] => string(3)“yes”[“b”] => string(2)“no”[“c”] => string(3)“yes”[“d”] => string(2)“no”}

猜你在找的PHP相关文章