我将结果集设置为数据库中的数组,如下所示:
array (
0 => array (
"a" => "something"
"b" => "something"
"c" => "something"
)
1 => array (
"a" => "something"
"b" => "something"
"c" => "something"
)
2 => array (
"a" => "something"
"b" => "something"
"c" => "something"
)
)
我如何应用一个函数来仅在数组键上用b替换数组的值?通常我会用foreach循环重建一个新数组,如果数组键是b,则应用该函数,但我不确定它是否是最好的方法。我试过看看很多数组函数,看起来像array_walk_recursive是我可能会使用的东西,但我没有运气让它做我想做的事情。如果我没有足够好地描述它,基本上我希望能够像下面的代码那样做:
$arr = array();
foreach ($result as $key => $value)
{
foreach ($value as $key2 => $value2)
{
$arr[$key][$key2] = ($key2 == 'b' ? $this->_my_method($value2) : $value2);
}
}
我应该坚持下去,还是有更好的方法?
答案 0 :(得分:4)
如果你有PHP> = 5.3.0(对于anonymous functions):
array_walk_recursive($result, function (&$item, $key) {
if ($key == 'b') {
$item = 'the key is b!';
}
});
否则就像:
function _my_method(&$item, $key) {
if ($key == 'b') {
$item = 'the key is b!';
}
}
array_walk_recursive($result, '_my_method');
答案 1 :(得分:0)
未经测试,但我认为这会奏效。
function replace_b (&$arr)
{
foreach ($arr as $k => $v)
{
if ($k == 'b')
{
/* Do something */
}
if (is_array($v)
{
replace_b($arr[$k]);
}
}
}
该函数将在数组中移动,检查b
的键。如果键指向数组,则递归地跟随它。
答案 2 :(得分:0)
使用array_walk_recursive
documented here
$replacer = function($x) {return "I used to be called $x";}; //put what you need here
$replaceB = function(&$v, $k) use ($replacer) {if ($k === 'b') $v = $replacer($v);};
array_walk_recursive($arr, $replaceB);
replacer
功能可能有点矫枉过正。你可以用文字或任何你喜欢的东西替换它。