我正在使用Code#A的 php代码,如下所示,其中在调试时(Line#A)打印以下内容:
代码#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个不同行的按钮。
单击第一行按钮时,值0 显示在 Line#B
单击第二行按钮时,值1 显示在 Line#B
问题陈述:
我想知道应该对(具有Line#B和Line#C)以上的 php代码(代码#B)进行哪些更改,以便:< / p>
点击第一行按钮后,行#C打印36031P.mp4 。
点击第二行按钮时,行#C打印hello.mp4 。
答案 0 :(得分:1)
使用foreach
的AFAIK将遍历整个数组,因为未指示停止点。
尝试以下操作...
for($i=0; $i <= count($mp4_files); $i++) {
if($i == $_POST['id']) {
$parts = pathinfo( $mp4_files[$i] );
switch ($parts['extension']) {
//
}
break;
}
}
您可以从那里开始。对不起,我正在从移动设备上键入内容,因此并不容易。我一把手放在机器上,就会寄出更好的东西。
已编辑
在您的代码中尝试以下操作
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
,以及以后如何将其用于比较。
答案 1 :(得分:1)
如果$_POST['id']
始终与array_values
返回的索引一致,那么它将起作用:
$mp4Files = array_values($mp4Files);
if (
!empty($_POST['id']) &&
!empty($mp4Files[$_POST['id']])
) {
print_r($mp4Files[$_POST['id']]); // Line#C
}