Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何在$U POST中搜索动态添加的输入值?_Php_Arrays_For Loop_Post_Search - Fatal编程技术网

Php 如何在$U POST中搜索动态添加的输入值?

Php 如何在$U POST中搜索动态添加的输入值?,php,arrays,for-loop,post,search,Php,Arrays,For Loop,Post,Search,我有一个表单,可以动态添加输入 输入的名称开头相同,但末尾添加了一个数字: 现在,当我发布我的表单时,我想循环这个输入 所以我需要一些类似数组搜索$POST['number\u of \u floors\u house%'] 或者查找所有以“楼层数”开头的$POST['keys'],并循环它们以获取其值: 你能帮忙吗 编辑 我试过: 将您的输入更改为以下内容: <input type="number" name="number_of_floors['+i+'

我有一个表单,可以动态添加输入

输入的名称开头相同,但末尾添加了一个数字:

现在,当我发布我的表单时,我想循环这个输入

所以我需要一些类似数组搜索$POST['number\u of \u floors\u house%']

或者查找所有以“楼层数”开头的$POST['keys'],并循环它们以获取其值:

你能帮忙吗

编辑 我试过:


将您的输入更改为以下内容:

<input type="number" name="number_of_floors['+i+']">
您可以使用数组过滤器来挑选您实际想要的$帖子片段,如下所示

//fake up a post array
$_POST = ['aa'=>1, 'bb'=>2, 'number_of_floors_house_1'=>2, 'number_of_floors_house_2'=>2,'number_of_floors_house_3'=>4];

function picker($v, $k)
{
    return strpos($k, 'number_of_floors_house') !== FALSE;
}
$res = array_filter($_POST, 'picker', ARRAY_FILTER_USE_BOTH);
print_r($res);
结果

Array
(
    [number_of_floors_house_1] => 2
    [number_of_floors_house_2] => 2
    [number_of_floors_house_3] => 4
)

您可以筛选与给定前缀和匹配的数组键:

这将筛选具有已定义前缀的所有数组成员的post数据。请注意,我们正在检查函数外部的前缀长度,以避免函数内部的冗余重复计算,每个数组成员只执行一次。当然,您也可以为单个用例硬编码,并跳过上面的前导变量:

$nof = array_filter($_POST, function($key) {
    return strncmp('number_of_floors_', $key, 17) === 0;
}, ARRAY_FILTER_USE_KEY);

…将每个键的前17个字符与定义的字符串进行比较。同样,您也可以使用substr来代替strncmp,并使用返回substr$key、0、$length===$prefix作为过滤条件。我在本例中选择了前者,因为它是一个函数,用于显式比较前n个字符的二进制安全字符串。

那么您尝试了哪一个?第二个看起来像是一个简单的foreach循环,用于构建一个新的东西数组,我不想让你看一下文档:。虽然strpos适用于这种情况,但进行显式前缀比较不是更安全吗?假设表单中还包含一些键,如number\u of theu floors\u house或view\u number\u of theu floors\u house,则会出现误报。此外,为什么要从数组过滤器回调返回键值对?如果回调函数返回TRUE,则数组中的当前值将返回到结果数组中。手动似乎只是返回strpos。。。够了吗?
Array
(
    [number_of_floors_house_1] => 2
    [number_of_floors_house_2] => 2
    [number_of_floors_house_3] => 4
)
$prefix = 'number_of_floors_';
$length = strlen($prefix);

$nof = array_filter($_POST, function($key) use ($prefix, $length) {
    return strncmp($prefix, $key, $length) === 0;
}, ARRAY_FILTER_USE_KEY);
$nof = array_filter($_POST, function($key) {
    return strncmp('number_of_floors_', $key, 17) === 0;
}, ARRAY_FILTER_USE_KEY);