如何使foreach循环在php中只取值?
我正在使用代码a中的php代码,如下所示,在调试中(第a行)打印以下内容: 代码#A如何使foreach循环在php中只取值?,php,button,foreach,Php,Button,Foreach,我正在使用代码a中的php代码,如下所示,在调试中(第a行)打印以下内容: 代码#A $mp4_files = array_values($mp4_files); print_r($mp4_files); // Line#A 第#A行的输出: 代码#B print_r($_POST['id']); // Line#B if (!empty($_POST['id'])) { foreach ($mp4_files as $f) {
$mp4_files = array_values($mp4_files);
print_r($mp4_files); // Line#A
第#A行的输出:
代码#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有两个值:0和1,点击两行中的按钮即可获得
单击第一行按钮时,值0显示在行#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);
}
}
}
单击第二行按钮时,值1显示在行#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);
}
}
}
问题陈述: 我想知道我应该在上面的php代码(代码B)中做些什么更改(有第B行和第C行): 单击第一行按钮时,行#C打印36031P.mp4
当点击第二行按钮时,行#C打印hello.mp4AFAIK,使用
foreach
将在整个阵列中循环,因为没有指示停止点。
试试下面的
注意
foreach
声明中的附加$key
,以及我后来如何使用它进行比较。AFAIK,使用foreach
将在整个数组中循环,因为没有指示停止点。
试试下面的
请注意
foreach
声明中的附加$key
,以及我后来如何使用它进行比较。如果$\u POST['id']
始终与数组\u值返回的索引一致,这将起作用:
$mp4Files = array_values($mp4Files);
if (
!empty($_POST['id']) &&
!empty($mp4Files[$_POST['id']])
) {
print_r($mp4Files[$_POST['id']]); // Line#C
}
如果$\u POST['id']
始终与数组\u值返回的索引一致,这将起作用:
$mp4Files = array_values($mp4Files);
if (
!empty($_POST['id']) &&
!empty($mp4Files[$_POST['id']])
) {
print_r($mp4Files[$_POST['id']]); // Line#C
}
这是对原问题的评论。我没有足够的声誉将其添加为评论=>print\r($f);/第C行打印2个值36031P.mp4hello.mp4
当您在整个数组上执行完整迭代时,此输出是两个不同打印
的串联结果。要清楚地显示这一点,请尝试=>print\r($f);回音“\n”代码>我正在修改我的问题。在foreach循环中,正在将mp4转换为mp3。刚刚修改了我的问题。让我知道它的外观。正如@parsonsbot所解释的,并且我理解了您的问题,您只想从数组中打印一个与$\u POST['id']
相对应的值?请注意,在没有匹配条件的数组上调用foreach
,或break
,continue
etc语句,整个数组将被迭代,这意味着将打印所有条目。要避免这种情况,请选中仅在数组索引==$\u POST['id']
时使用该值,并在满足条件时将从循环中断开。我将编辑我的答案以显示完整的代码。是的,我已经从代码中删除了break。在我的代码中,由于某些原因,它是not GONG switch语句。不知道是什么问题。我在switch语句中加入了echo“helloworld”,它没有打印任何内容。这是对原始问题的评论。我没有足够的声誉将其添加为评论=>print\r($f);/第C行打印2个值36031P.mp4hello.mp4
当您在整个数组上执行完整迭代时,此输出是两个不同打印
的串联结果。要清楚地显示这一点,请尝试=>print\r($f);回音“\n”代码>我正在修改我的问题。在foreach循环中,正在将mp4转换为mp3。刚刚修改了我的问题。让我知道它的外观。正如@parsonsbot所解释的,并且我理解了您的问题,您只想从数组中打印一个与$\u POST['id']
相对应的值?请注意,在没有匹配条件的数组上调用foreach
,或break
,continue
etc语句,整个数组将被迭代,这意味着将打印所有条目。要避免这种情况,请选中仅在数组索引==$\u POST['id']
时使用该值,并在满足条件时将从循环中断开。我将编辑我的答案以显示完整的代码。是的,我已经从代码中删除了break。在我的代码中,由于某些原因,它是not GONG switch语句。不知道是什么问题。我把echo“helloworld”放在switch语句中,它没有打印任何内容。