получить значения из ключей с foreach (многомерный массив) - PullRequest
0 голосов
/ 29 апреля 2019

У меня есть многомерный массив

(Array ( [filenames] => Array ( [0] => 2.jpeg [1] => 3.jpeg ) [sizes] => Array ( [0] => 0.00 MB [1] => 0.00 MB ) [temp_names] => Array ( [0] => /private/var/folders/np/sln14hvn3tsbzc4kpjjtp17c0000gn/T/phpLVhmBY [1] => /private/var/folders/np/sln14hvn3tsbzc4kpjjtp17c0000gn/T/phpoifsg0 ) [uploads] => Array ( [0] => /Users/sandro/Documents/bildgalerie/uploads/2.jpeg [1] => /Users/sandro/Documents/bildgalerie/uploads/3.jpeg ) ))

, и я хочу получить все значения из определенных ключей (например, «имен файлов») с помощью foreach.

Вот часть массива:

$uploadData = array(
    'filenames' => array(),
    'sizes' => array(),
    'temp_names' => array(),
    'uploads' => array()
);

Этот код еще не работает, но я понятия не имею, почему: (

foreach ($uploadData as $row) {
    if (move_uploaded_file($row['temp_names'], $location . '/' . basename($row['filenames']))) {
        echo 'File uploaded.';
        echo '<br>';
    }
}

Ошибка: Notice: Undefined index: filenames in X on line X

1 Ответ

1 голос
/ 29 апреля 2019

Вы не понимаете, что делает foreach и как структурированы массивы. Итерирует по каждому элементу данного массива. Вы сказали, что ваши данные выглядят так:

$uploadData = [
    'filenames' => ["2.jpeg", "3.jpeg"],
    'sizes' => ["0.00 MB", "0.00 MB"],
    'temp_names' => ["/private/var/folders/np/sln14hvn3tsbzc4kpjjtp17c0000gn/T/phpLVhmBY", "/private/var/folders/np/sln14hvn3tsbzc4kpjjtp17c0000gn/T/phpoifsg0"],
    'uploads' => ["/Users/sandro/Documents/bildgalerie/uploads/2.jpeg", "/Users/sandro/Documents/bildgalerie/uploads/3.jpeg"],
];

Итак, это массив из 4 элементов. Каждая итерация цикла даст вам новый элемент. На первой итерации вы получаете массив ["2.jpeg", "3.jpeg"] и пытаетесь получить доступ к элементу filenames этого массива. Очевидно, нет ни одного.

Вместо этого вы можете просто зациклить один из под-массивов:

foreach ($uploadData["filenames"] as $key => $value) {
    if (move_uploaded_file($uploadData["temp_names"][$key], $location . '/' . basename($value))) {
        echo 'File uploaded.';
        echo '<br>';
    }
}

На первой итерации $key будет 0, а $value будет 2.jpeg. Вы можете использовать этот ключ, чтобы получить совпадающие значения в других подмассивах.

...