Php 数组_map strtolower()要求参数1为字符串

Php 数组_map strtolower()要求参数1为字符串,php,arrays,foreach,Php,Arrays,Foreach,我得到了这个错误警告:strtolower()希望参数1是字符串,数组给定。。 我不知道我怎么会犯错误。。请帮忙,谢谢 $mypages = array( 'Pages' => array('page' => array('view_all_pages', 'add_page', 'dashboard'), 'test' => array('test1', 'test2')), 'Users' => array('vieW_all_users', 'add_user'))

我得到了这个错误警告:strtolower()希望参数1是字符串,数组给定。。 我不知道我怎么会犯错误。。请帮忙,谢谢

$mypages = array(
'Pages' => array('page' => array('view_all_pages', 'add_page', 'dashboard'),
'test' => array('test1', 'test2')),
'Users' => array('vieW_all_users', 'add_user'));

foreach($mypages as $keys => $key):
   if(is_array($key)):
       $key = array_map('strtolower' ,$key);
   endif;
endforeach;

$mypages['Pages']['page']
不包含可传递给
strtolower()
的字符串


您应该通过在循环中转储
$key
来进行调试。

您的数组中有数组哟

在请求(并尝试转换)值之前,必须迭代数组。 尝试有条件地遍历数组,例如

//pseudo
func myRecursion($data = array()) {
 foreach($data as $value) {
    if(is_array($value)) {
        $data = myRecusion($data[$value]);   
    } else {
        //its not an array so do your thing
    }
 }

 return($data);

}

foreach是一个循环,它将为您提供数组的第一级键=>值对

foreach($mypages as $keys => $key){
   echo "Key : $keys \n";
   echo "Value : ";var_dump($key);
}
function strtolowerArray(&$arr){
    foreach($arr as $k=>$v){
        if(is_array($v)){
             $arr[$k] = strtolowerArray($v);
        }
        else if(is_string($v)){
             $arr[$k] = strtolower($v);
        }
        else{
             throw new \LogicException("The value is neither a string nor an array");
        }

    }
    return $arr;
}

$mypages = array(
 'Pages' => array(
     'page' => array('view_ALL_pages', 'aDD_page', 'DaShbOArd'),
     'test' => array('test1', 'TEST2')
   ),
   'Users' => array('vieW_all_users', 'aDd_uSer')
);

var_dump(strtolowerArray($mypages));
将输出:

 Key : Pages
 Value :  array('page' => array('view_all_pages', 'add_page', 'dashboard'), 'test'=> array('test1', 'test2')),
 Key : Users
 Value : array('vieW_all_users', 'add_user')
要使其工作,需要检查该值是否为数组

foreach($mypages as $keys => $key){
   echo "Key : $keys \n";
   echo "Value : ";var_dump($key);
}
function strtolowerArray(&$arr){
    foreach($arr as $k=>$v){
        if(is_array($v)){
             $arr[$k] = strtolowerArray($v);
        }
        else if(is_string($v)){
             $arr[$k] = strtolower($v);
        }
        else{
             throw new \LogicException("The value is neither a string nor an array");
        }

    }
    return $arr;
}

$mypages = array(
 'Pages' => array(
     'page' => array('view_ALL_pages', 'aDD_page', 'DaShbOArd'),
     'test' => array('test1', 'TEST2')
   ),
   'Users' => array('vieW_all_users', 'aDd_uSer')
);

var_dump(strtolowerArray($mypages));
strtolowerArray参数前面的“&”表示通过引用传递变量。如果strtolowerArray函数作用域内的变量发生任何更改,那么它将反映到父作用域中