2013-11-10 3 views
1

У меня есть эта ошибка Предупреждение: strtolower() ожидает, что параметр 1 будет строкой, массив задан .. Я не знаю, как у меня появилась моя ошибка .. Пожалуйста, помогите спасибо!array_map 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; 

ответ

1

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, то она будет отражена в родительской области.

+0

спасибо! – user1157768

0

$mypages['Pages']['page'] не содержит строку, которая может быть передана в strtolower().

Вы должны отлаживать сброс $key внутри цикла.

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

} 
Смежные вопросы