我试图检索一组图像。所有图像都显得很好。但是,名称为“image_01”和“image_02”的图像将被检索为image_1和image_2。这是因为我使用的“str_replace”。有人能告诉我为什么会这样吗?
$image=$policy->gallery;
$image = trim($image,'*');
$temp = explode('*',$image );
echo $temp[5];
// $temp = array_filter($temp);
foreach($temp as $image)
{
$images[]=base_url()."images/park_photos/".trim( str_replace( array('['*']') ,"" ,$image ) );
//echo trim( str_replace( array('['*']') ,"" ,$image ));
}
foreach($images as $image)
{
echo "<img src='{$image}' style='width:100px; height:100px; display:block; float:left;' />";
}
?>
答案 0 :(得分:2)
要修复它,您需要替换
$images[]=base_url()."images/park_photos/".trim( str_replace( array('['*']') ,"" ,$image ) );
与
$images[] = base_url() . trim($image);
甚至
$images[] = base_url() . $image;
发生了什么事?我想,使用此str_replace
,您需要确保从图片名称中删除*
。但是你之前已经做过($temp = explode('*',$image );
)所以不需要复制。
现在,为什么0
会从图片名称中删除?在array('['*']')
中发生了一些“魔力”。由于引号序列,*
字符被解释为乘法。要理解,请尝试这样做:
$a = '['*']';
var_dump($a);
// outputs: int(0)
为什么呢? PHP从上下文中猜测变量类型。在这种情况下的上下文是:将'['
乘以']'
。由于乘法适用于数字,因此PHP将两个字符串('['
和']'
)强制转换为整数,零。 (阅读更多关于Type Juggling)的信息
所以,str_replace( array('['*']') ,"" ,$image )
等于str_replace( array(0) ,"" ,$image )
- 即“用空字符串替换零。