1

このエラーが発生しました 警告: 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;
4

3 に答える 3

2

foreach は、配列のキー=>値のペアの最初のレベルを提供するループです。

foreach($mypages as $keys => $key){
   echo "Key : $keys \n";
   echo "Value : ";var_dump($key);
}

出力します:

 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')

機能させるには、値が配列かどうかを確認する必要があります。

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 関数のスコープ内でこの変数に何らかの変更が発生すると、親スコープに反映されます。

于 2013-11-10T02:51:45.960 に答える
0

$mypages['Pages']['page']に渡すことができる文字列が含まれていませんstrtolower()

$keyループ内でダンプしてデバッグする必要があります。

于 2013-11-10T02:33:08.160 に答える
0

あなたの配列には配列がありますよ!

値を要求する (そして変換を試みる) 前に、配列を反復処理する必要があります。条件付きで配列をウォークスルーしてみてください。

//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);

}
于 2013-11-10T02:35:05.567 に答える