我确定之前已经问过这个问题,我很抱歉没先找到它.
原始数组:
[0] => Array
(
[categoryId] => 1
[eventId] => 2
[eventName] => 3
[vendorName] => 4
)
[1] => Array
(
[categoryId] => 5
[eventId] => 6
[eventName] => 7
[vendorName] => 8
)
[2] => Array
(
[categoryId] => 9
[eventId] => 10
[eventName] => 11
[vendorName] => 12
)
Run Code Online (Sandbox Code Playgroud)
我希望得到的结果是:print_r(get_values_from_a_key_in_arrays('categoryId',$ array));
[0] => 1
[1] => 5
[2] => 9
Run Code Online (Sandbox Code Playgroud)
我只是在寻找比编写自己的基于foreach的功能更清晰的东西.如果foreach是答案,我已经有了.
编辑:我不想使用硬编码密钥,我只是展示了一个示例调用解决方案.谢谢!^ _ ^
PHP 5.3快速抓取解决方案:
private function pluck($key, $data) {
return array_reduce($data, function($result, $array) …Run Code Online (Sandbox Code Playgroud) 有没有办法做类似的东西break从一个for循环,但在阵列的reduce()功能?
例如,考虑我有一个数组:
var flags = [false, false, true, false, false, true, false]
Run Code Online (Sandbox Code Playgroud)
......我需要累积||起来.使用for循环,可以执行以下操作:
var resultByFor = false
for flag in flags {
if flag {
resultByFor = true
break
}
}
Run Code Online (Sandbox Code Playgroud)
...即在我们获得第一个时刻,true没有必要完成循环,因为结果true无论如何.
使用reduce(),以下看起来非常整洁:
var resultByReduce = flags.reduce(false) { $0 || $1 }
Run Code Online (Sandbox Code Playgroud)
但是,对于示例中给出的数组,for循环体仅执行3次,而reduce()函数闭包将被触发完整7次.
有没有办法reduce()在第3次迭代中拯救(就像它可以在for循环中完成)?
[UPD]
我过分简化了这个问题.原来的问题更像这样:
extension Int {
func isWholeMultiplesOf(base: Int) -> Bool {
return …Run Code Online (Sandbox Code Playgroud) 实现数据库查询后,我将获得下面的多维数组.
二维数组
Array
(
[0] => Array
(
[t1] => test1
)
[1] => Array
(
[t2] => test2
)
[2] => Array
(
[t3] => test3
)
[3] => Array
(
[t4] => test4
)
[4] => Array
(
[t5] => test5
)
)
Run Code Online (Sandbox Code Playgroud)
但我想将其转换为单维数组,如下面的格式.
一维数组
Array (
t1 => test1
t2 => test2
t3 => test3
t4 => test4
t5 => test5
)
Run Code Online (Sandbox Code Playgroud)
请帮我这样做
我有一个array_reduce函数,我愿意在满足特定条件时退出.
$result = array_reduce($input, function($carrier, $item) {
// do the $carrier stuff
if (/* god was one of us */) {
break; //some break analogue
}
return $carrier;
});
Run Code Online (Sandbox Code Playgroud)
我该如何实现这一目标?或者我应该使用foreach代替?
我正在从O'reilly的媒体书"编程PHP"中学习PHP,我偶然发现了这个:
function add_up ($running_total, $current_value) {
$running_total += $current_value * $current_value;
return $running_total;
}
$numbers = array(2, 3, 5, 7);
$total = array_reduce($numbers, 'add_up');
echo $total;
Run Code Online (Sandbox Code Playgroud)
array_reduce()行进行以下函数调用:
add_up(2,3)
add_up(11,5)
add_up(36,7)
// $total is now 87
Run Code Online (Sandbox Code Playgroud)
但是当我计算得到85.我认为应该这样写:
该array_reduce( )行使这些函数调用:
add_up (0,2);
add_up (4,3);
add_up (13,5);
add_up (38,7);
Run Code Online (Sandbox Code Playgroud)
因为默认情况下可选值$ initial设置为NULL.
mixed array_reduce ( array $input , callable $function [, mixed $initial = NULL ] )
Run Code Online (Sandbox Code Playgroud)
有更多知识的人可以向我解释,谁错了,为什么?
为什么array_reduce()添加和乘法时该方法的工作方式不同?当我在下面添加数组值时,代码会产生预期的结果:15.但是当我乘以时,它返回:0.相同的代码......唯一的区别是+标志是为*标志切换的.
function sum($arr){
print_r(array_reduce($arr, function($a, $b){return $a + $b;}));
}
function multiply($arr){
print_r(array_reduce($arr, function($a, $b){return $a * $b;}));
}
sum(array(1, 2, 3, 4, 5)); // 15
multiply(array(1, 2, 3, 4, 5)); // 0
Run Code Online (Sandbox Code Playgroud) 我有一个将多维数组发布到我的PHP脚本的表单,我需要知道数组中的所有值是否为空。
这是我的数组:
$array[] = array('a'=>'',
'b'=>array('x'=>''),
'c'=>array('y'=>array('1'=>'')),
'd'=>'');
Run Code Online (Sandbox Code Playgroud)
我尝试使用array_reduce(),但它只是返回一个数组:
echo array_reduce($array, "em");
function em($a,$b){
return $a.$b;
}
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
我正在尝试获得大于的数组值n.
我array_reduce()这样使用:
$arr = range(1,10);
echo array_reduce($arr, function ($a, $b) { return ($b > 5) ? ++$a : $a; });
Run Code Online (Sandbox Code Playgroud)
这打印出数组中元素的数量大于硬编码的元素5.
但是我怎么能做5变量$n呢?
我试过引入第三个这样的参数:
array_reduce($arr, function ($a, $b, $n) { return ($b > $n) ? ++$a : $a; });
// ^ ^
Run Code Online (Sandbox Code Playgroud)
乃至
array_reduce($arr, function ($a, $b, $n) { return ($b > $n) ? ++$a : $a; }, $n);
// ^ ^ ^
Run Code Online (Sandbox Code Playgroud)
这些都不起作用.你能告诉我如何在这里包含一个变量吗?
var developers = [
{ name: "Joe", age: 23 ,overallLevel: "high"},
{ name: "Sue", age: 28 ,overallLevel: "advanced" },
{ name: "Jon", age: 32 ,overallLevel: "high" },
{ name: "Bob", age: 24 ,overallLevel: "high" },
{ name: "Bob", age: 20 ,overallLevel: "advanced" }
]
Run Code Online (Sandbox Code Playgroud)
使用array.reduce()需要在提到的数组中计算overallLevel [high:3,advanced:2]
我如何使用array.reduce来改变数组内容的方式.我不想对内容做任何数学.
Orinal数组:
var myArray = [
{id:1, name:'name01', value:11},
{id:2, name:'name02', value:22},
{id:3, name:'name03', value:33},
{id:4, name:'name04', value:44},
{id:5, name:'name05', value:55}
]
Run Code Online (Sandbox Code Playgroud)
我希望它改为:
[
{1:{id:1, name:'name01', value:11}},
{2:{id:2, name:'name02', value:22}},
{3:{id:3, name:'name03', value:33}},
{4:{id:4, name:'name04', value:44}},
{5:{id:5, name:'name05', value:55}}
]
Run Code Online (Sandbox Code Playgroud)
因此,id在弹出的object是一个key和value它的整个object.
这可以通过array.reduce不使用任何for loop或groupBy?
array-reduce ×10
php ×7
arrays ×6
javascript ×2
break ×1
callback ×1
count ×1
ecmascript-6 ×1
loops ×1
pluck ×1
scope ×1
swift ×1