Как работать с таким массивом на php?

    <!DOCTYPE html>
<html lang="ru">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Регистрация</title>
</head>
<body>
    <form action="action.php" method="post" enctype="multipart/form-data">
        <input type="text" name="firstname" placeholder="Введите имя"><br><br>
        <input type="text" name="lastname" placeholder="Введите фамилию"><br><br>
        <input type="text" name="secondname" placeholder="Введите отчество"><br><br>
        <input type="text" name="address" placeholder="Введите адрес"><br><br>
        <input type="checkbox" name="men" value="мужчина" checked>мужчина<br><br>
        <input type="checkbox" name="women" value="женщина">женщина<br><br>
        <input type="radio" name="robot" value="я не робот">я не робот<br><br>
        <select name="select[]" size="5" multiple>
            <option disabled selected>Какими языками владеете</option>
            <option value="французский">французский</option>
            <option value="русский">русский</option>
            <option value="английский">английский</option>
            <option value="немецкий">немецкий</option>
        </select><br><br>
        <input type="file" name="filename" size=""><br><br>
        <input type="submit" value="Submit">
    </form>
</body>
</html>

есть разметка html

от него я получаю вот такой массив

Array
(
    [firstname] => иван
    [lastname] => иванов
    [secondname] => иванович
    [address] => москва
    [men] => мужчина
    [robot] => я не робот
    [select] => Array
        (
            [0] => французский
            [1] => русский
            [2] => английский
            [3] => немецкий
        )

)

прогоняю через функцию что бы получить данные введены пользователем в таком формате Иван Иванов Иванович . т.д

Но не получается передать вложенный массив и перебор вложенного масива функциями for, foreach, и.т.п не дает нужных результатов

Мне надо что-бы на выходе получалось вот это

    Array
(
    [firstname] => Иван
    [lastname] => Иванов
    [secondname] => Иванович
    [address] => Москва
    [men] => Мужчина
    [robot] => Я не робот
    [select] => Array
        (
            [0] => Французский
            [1] => Русский
            [2] => Английский
            [3] => Немецкий
        )

)

никаким образом не могу отдельно их получить что-бы работать с ним

[select] => Array
        (
            [0] => Французский
            [1] => Русский
            [2] => Английский
            [3] => Немецкий
        )

кто может помочь.

Я самоучка занимаюсь 1.2 месяца, на этой проблеме я несколько дней зациклился


Ответы (2 шт):

Автор решения: Rousi

Можно обрабатывать этот массив отдельно:

$cnt = count($array['select']); // Определяем количество выбранных языков
for($i = 0; $i < $cnt; $i++) {
 // Тута делаем, что нужно
 // Для обращения к элементу используйте: $array['select'][$i]
}

Если же вы хотите заключить этот код в свой цикл foreach, то можно сделать вот так:

foreach ($array as $key => $value) {
 if(is_array($array[$key])) { // Если $array[$key] является массивом, то это наши языки
  $cnt = count($array[$key]) // Определяем количество выбранных языков
  for($i = 0; $i < $cnt; $i++) {
   // Тута делаем, что нужно
   // Для обращения к элементу используйте: $array[$key][$i]
  }
 }
 else { // А если это не массив, значит это не языки
  // Тут ваш код обработки всего остального
 }
}

В данном случае языки находились во вложенном массиве 'select'. Более подробно про многомерные массивы можно прочитать тут: https://metanit.com/php/tutorial/2.16.php либо введя "Многомерные массивы" в поисковик.

→ Ссылка
Автор решения: teran

хрустальный шар подсказал, что намереваетесь обойти рекурсивно весь массив и применить к нему нечто вроде mb_strtoupper, так что с этой целью можно использовать примерно следующий код:

array_walk_recursive($data, function(&$d){  
    $d = mb_strtoupper($d); 
});

обратите внимание, что аргумент в функцию обратного вызова передается по ссылке.

→ Ссылка