2017-08-31 138 views
0

我有名字my_image[url]my_image[caption]动态输入

<input name="my_image[url]" type="hidden" value="<?php echo $imgurl['url'];?>"/> 
<input name="my_image[caption]" type="text" value="<?php echo $imgurl['caption'];?>"> 

即使插入一些图片和文字说明动态,里面的isset的$ _POST ['my_image']是只捕获1图片1说明:

if (isset($_POST['my_image'])){ 
    update_option('imagens_inicio',array($_POST['my_image']); 
    echo '<pre>'; var_dump($_POST['my_image']);echo '</pre>'; 
} 

array(1) { 
    [0]=> 
    array(2) { 
    ["url"]=> 
    string(96) "http://localhost/theme/wp-content/uploads/2017/08/4e07dd2bd752b989e9b4687129982977.jpg" 
    ["caption"]=> 
    string(0) "test text" 
    } 
} 

我该怎么办在isset中捕获所有图像和标题$_POST['my_image']

解决:

$url = $_POST['url']; 
$caption = $_POST['caption']; 

$data = array_map(function ($url, $caption) { 
     return compact('url', 'caption'); 
}, $url, $caption); 

回答

1

总之,只有isset不会得到你所需要的结果。

由于my_image [url]将永远解析为$ _POST ['my_image'] ['url']它确实会被覆盖。如果使用[],php会自动增加每次发生的数字,但在这种情况下,它不会将url和标题放在一起。

如果你想确保你在你提供,你可以命名输入字段这样的方式接收数据:

my_image[0][url] 
my_image[0][caption] 
my_image[1][url] 
my_image[1][caption] 
etc... 

你也可以重塑的数据,例如:

url[] 
caption[] 
url[] 
caption[] 
etc 

然后你可以使用一些处理的数据在PHP组合:

<?php 
$data = array_map(function ($url, $caption) { 
    return compact('url', 'caption'); 
}, $_POST['url'], $_POST['caption']); 

var_dump($data); 

要阅读价值S:

foreach ($data as $image) { 
    echo $image['caption'].': '.$image['url'].PHP_EOL; 
} 

Ofcourse这需要被包裹在一个isset & & is_array检查的$ _POST [ '网址']和$ _ POST [ '标题']

+0

我读到有关职能'array_map'和'compact',非常感谢你,现在我理解你的答案,但它仍然返回null var_dump($ data);' – Gislef

+0

'$ _POST ['url'];'''_ _POST ['caption' ];'直接在'array_map'中不起作用,现在没关系。太感谢了 – Gislef

相关问题