Как заставить цикл foreach принимать только значение в php? - PullRequest
0 голосов
/ 09 июня 2019

Я работаю над php кодом из кода # A, как показано ниже, в котором при отладке (строка # A) выводится следующее:

Code # A

$mp4_files = array_values($mp4_files);

print_r($mp4_files);   // Line#A

Выход из строки № A:

Array ( [0] => 36031P.mp4 [1] => hello.mp4 )

Код # B

print_r($_POST['id']);   // Line#B

  if (!empty($_POST['id']))
  {
     foreach ($mp4_files as $f)
         {   
             print_r($f); // Line#C prints 2 values 36031P.mp4hello.mp4
             $parts = pathinfo($f);
             switch ($parts['extension'])
             {
                 case 'mp4' :
                 $filePath = $src_dir . DS . $f;
                 system('ffmpeg -i ' . $filePath . ' -map 0:2 -ac 1 ' . $destination_dir . DS . $parts['filename'] . '.mp3', $result);
             }
         }
   }

Строка # B из кода # B имеет 2 значения : 0 и 1 , которые появляются по нажатию кнопки из 2разные строки.

Когда нажата кнопка 1-го ряда , значение 0 отображается в Строка # B

Когда 2ndнажата кнопка строки , значение 1 отображается в Строка # B


Постановка задачи:

Мне интересно, какие изменения я должен внести в php код (код # B) выше (в котором есть строка # B и строка # C) , чтобы:

При нажатии кнопки 1-й строки Line # C печатает 36031P.mp4 .

При нажатии кнопки 2-й строки Line # C печатает hello.mp4 .

Ответы [ 2 ]

1 голос
/ 09 июня 2019

Если $_POST['id'] всегда соответствует индексам, возвращаемым array_values, это будет работать:

$mp4Files = array_values($mp4Files);

if (
    !empty($_POST['id']) &&
    !empty($mp4Files[$_POST['id']])
) {
    print_r($mp4Files[$_POST['id']]); // Line#C
}
1 голос
/ 09 июня 2019

AFAIK, используя foreach, будет проходить цикл по всему массиву, так как точка остановки не указана.
Попробуйте следующее ...

    for($i=0; $i <= count($mp4_files); $i++) {
        if($i == $_POST['id']) {
            $parts = pathinfo( $mp4_files[$i] );
            switch ($parts['extension']) {
                //
            }
        break;
        }
    }

Вы можете основываться на этом оттуда. Мне жаль, что я печатаю с мобильного устройства, так что это нелегко. Я пошлю что-нибудь получше, как только положу руки на машину.

EDITED
Попробуйте следующее в своем коде

    print_r($_POST['id']);   // Line#B
    if (!empty($_POST['id'])) {
        foreach ($mp4_files as $key => $f) {
            if($key == $_POST['id']) {
                print_r($f); // Line#C prints 2 values 36031P.mp4hello.mp4
                $parts = pathinfo($f);
                switch ($parts['extension']) {
                    case 'mp4' :
                    $filePath = $src_dir . DS . $f;
                    system('ffmpeg -i ' . $filePath . ' -map 0:2 -ac 1 ' . $destination_dir . DS . $parts['filename'] . '.mp3', $result);
                    break;
                }
            }
            break; //stop further iteration after the condition is met
        }
    }

Обратите внимание на дополнительные $key внутри объявления foreach и то, как я позже использовал его для сравнения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...