PHP循环仅首次迭代输出动态变量,问题出在哪?
问题原因分析
你的代码问题出在循环里的变量拼接逻辑:
${'img_w_'.$image[$i]}
这里的$image[$i]是取当前图片名字符串的第$i个字符:
- 第一次循环
$i=0,$image是'0.jpg',$image[0]是'0',刚好匹配$img_w_0,所以输出正常; - 第二次循环
$i=1,$image是'1.jpg',$image[1]是'j',不存在$img_w_j这个变量,所以输出空值; - 第三次循环
$i=2,$image是'2.jpg',$image[2]是'.',同样没有对应变量,输出空值。
修正方案
因为你的数组索引$i刚好和图片名里的数字序号一致,直接用$i拼接变量名即可:
$images = array( '0.jpg', '1.jpg', '2.jpg' ); $img_w_0 = 312; $img_h_0 = 246; $img_w_1 = 485; $img_h_1 = 442; $img_w_2 = 380; $img_h_2 = 289; foreach ($images as $i=>$image): echo ' Width = '. ${'img_w_'.$i}; echo ' Height = '. ${'img_h_'.$i}; endforeach;
如果后续图片名的序号和数组索引可能不一致,更稳妥的方式是从图片名里提取数字部分,比如用preg_match:
foreach ($images as $image): preg_match('/(\d+)\.jpg/', $image, $matches); $num = $matches[1]; echo ' Width = '. ${'img_w_'.$num}; echo ' Height = '. ${'img_h_'.$num}; endforeach;
这样不管数组索引怎么变,只要图片名里的数字正确,就能匹配到对应的宽高变量。
内容的提问来源于stack exchange,提问作者Tyssen
相关产品推荐
相关产品推荐

