- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我有以下代码,我想摆脱调用时间传递引用,(从 5.2 转换为 5.3)但我不确定正确的方法是什么这将是(类,全局变量,?)
这是一个应该包含所有内容的键盘 http://codepad.org/ombgFPMR
<?php
function count_things($item, $key, $total) {
$total++;
}
$counts = array(100 => 1,
101 => 1,
102 => array(
106 => 1,
107 => 1
),
103 => 1,
104 => 1,
105 => array(
108 => 1,
109 => array(
110 => 1,
111 => 1,
112 => 1
)
)
);
foreach($counts as $key => $count) {
$total = 0;
if(is_array($count)) {
$total++;
/* The below is a logic error. Array elements that contain arrays do not get
the callback function called on them. Therefore, any children with children
of their own will not be counted. In the output of this paste,
the final key, $final_counts[105]['total'], should have a value of 6, but it
actually has a value of 5. */
array_walk_recursive($count, 'count_things', &$total);
} else {
$total = $count;
}
$final_counts[$key]['total'] = $total;
}
print_r($final_counts);
?>
输出如下:
Array
(
[100] => Array
(
[total] => 1
)
[101] => Array
(
[total] => 1
)
[102] => Array
(
[total] => 3
)
[103] => Array
(
[total] => 1
)
[104] => Array
(
[total] => 1
)
[105] => Array
(
[total] => 5
)
)
最佳答案
您可以将 count
与 COUNT_RECURSIVE
标志一起使用。
你应该为此使用闭包,它们是在 5.3.0 中引入的,所以它们应该可以工作。
<?php
$counts = array(
100 => 1,
101 => 1,
102 => array(
106 => 1,
107 => 1
),
103 => 1,
104 => 1,
105 => array(
108 => 1,
109 => array(
110 => 1,
111 => 1,
112 => 1
)
)
);
$final_counts = array();
foreach($counts as $key => $count) {
if(is_array($count)) {
$total = 1;
array_walk_recursive($count, function() use (&$total) {
$total++;
});
} else {
$total = $count;
}
$final_counts[$key]['total'] = $total;
}
print_r($final_counts);
如果您将问题放在上下文中,我可能会提供更好的解决方案。
关于php 5.3 转换 array_walk_recursive,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10922563/
我有一个菜单数组,它是一个多维数组,我想对每个项目做一些事情,所以我尝试了 array_walk_recursive。这是菜单: $menu = array( array( '
此代码有效,但 $vars 无法在 call() 函数中定义。为什么 $vars 不能传递给 array_walk_recursive()? class lib{ private $libra
此代码有效,但 $vars 无法在 call() 函数中定义。为什么 $vars 不能传递给 array_walk_recursive()? class lib{ private $libra
我如何使用 array_walk_recursive() 而不是这个: function check_value($val){ if(is_array($val)){ foreach($v
只是单纯的好奇。我在 Google 上找不到任何东西,我绝对不想深入研究 PHP 源代码。 是否array_walk_recursive实现尾调用优化? 最佳答案 简答,不:) 另请参阅:https:
如何使用 array_walk_recursive 修改键和值?? 这里只有值被编码 function _utf8_encode($arr){ array_walk_recursive($ar
array_walk_recursive 对数组中的每个成员递归地应用用户函数 基本语法 bool array_walk_recursive ( array &$input , call
我有一个关联数组,它是我使用以下代码从 ODBC 查询创建的: while ($row=odbc_fetch_array($oexec)) { if(empty($gr
我使用以下函数来验证搜索词是否在我的文件夹的文件名中。 $files2=list_files("documents/minelli"); Class Commentaire_filter{
array_walk_recursive($arr, function(&$val, $key){ if($val == 'smth'){ unset($val);
这是我在 php 中的一个类的简化版本: class someClass { public function edit_array($array) { array_walk_recu
我想对 SimpleXML 对象中的每个节点应用一个函数。 ABC DEF GHI JKL //函数reverseText($str){}
我已经查看了这里的一些答案,但似乎没有使用这种方法? 我有一个项目数组,项目是对象。该对象可以有一个键,它是“children”,“children”是一个对象数组等。 有什么办法可以实现吗? 示例:
一段时间以来,我一直在使用“传统”递归函数来展平多维数组,例如 $baseArray = array(array('alpha'), array('beta','
这个问题在这里已经有了答案: In PHP, what is a closure and why does it use the "use" identifier? (6 个答案) 关闭 3 年前。
我有以下代码,我想摆脱调用时间传递引用,(从 5.2 转换为 5.3)但我不确定正确的方法是什么这将是(类,全局变量,?) 这是一个应该包含所有内容的键盘 http://codepad.org/omb
我有一个深度多维数组,需要提取特定键的值。我发现 array_walk_recursive 函数将是我的最佳选择。我只需要第一次出现。 我的数组看起来像这样 - (除了更复杂) Array (
我尝试通过引用 Phps array_walk_recursive 传递第三个参数 $field = 'foo'; array_walk_recursive($config, function($va
我的 mysql 连接使用面向对象的风格,但是如果我这样写: array_walk_recursive($_POST, array($mysqli, 'real_escape_string')); 我
我是一名优秀的程序员,十分优秀!