我查看了网络中的类似主题以及堆栈溢出,但可以清楚地了解这一点.array_map,array_walk和array_filter之间的区别
<?php
error_reporting(-1);
$arr = array(2.4, 2.6, 3.5);
print_r(array_map(function($a) {
$a > 2.5;
},$arr));
print_r(array_filter($arr, function($a){
return $a > 2.5;
}));
?>
Run Code Online (Sandbox Code Playgroud)
上面的代码返回一个过滤后的数组,其值大于2.5.我可以实现array_filter与...的关系array_map吗?
我习惯了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
Run Code Online (Sandbox Code Playgroud)
实际示例 因此,使用此处提供的答案,以下是如何解析$ _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 )] …Run Code Online (Sandbox Code Playgroud) 我目前正在使用array_map回调来应用数组元素.但是我希望能够将一个参数传递给回调函数array_walk.我想我可以使用array_walk,但我需要返回值为数组,如果你使用array_map,而不是TRUE或FALSE.
那么是否可以使用array_map并将参数传递给回调函数?或者可能使array_walk返回数组而不是布尔值?
我只是想用array_walk()用ceil()圆阵列中的所有元素.但它不起作用.
代码:
$numbs = array(3, 5.5, -10.5);
array_walk($numbs, "ceil");
print_r($numbs);
Run Code Online (Sandbox Code Playgroud)
输出应为:3,6,-10
错误消息:
警告:ceil()预计在第2行给出1个参数,2
输出为:3,5.5,-10.5(与之前使用ceil()相同)
我也尝试过round().
我的代码是这样的
public function addQuestions($data){
$ans = array();
$ans[1] = $data['ans1'];
$ans[2] = $data['ans2'];
$ans[3] = $data['ans3'];
$ans[4] = $data['ans4'];
$ans= mysqli_real_escape_string($this->db->link, $data[$ans]);
}
Run Code Online (Sandbox Code Playgroud)
这是在这个 sql 函数中使用数组的正确方法吗??
以下code does not work按预期。
$fruits = array('apple', 'orange', 'banana', 'cherry');
array_walk($fruits, function($a) {
$a= ucfirst($a);
});
var_dump($fruits);
Run Code Online (Sandbox Code Playgroud)
为什么当我们将引用传递给数组中的单个条目时会起作用$fruits。
array_walk(
$fruits,
function(&$a) {
$a = ucfirst($a);
}
);
Run Code Online (Sandbox Code Playgroud)
注意:我知道array_map并且foreach会起作用,但为什么不起作用array_walk()?
假设我有一个关联数组:
$array = array(
"key1" => "value",
"key2" => "value2");
Run Code Online (Sandbox Code Playgroud)
而且我想把键全部大写.我怎么做比一般化的方式(意思是我可以应用用户定义的函数来应用键名)?