所以我正在努力从Gravity Forms表单中收集大量数据,该表单将值存储在名为$ entry []的数组中。
我需要从$ entry [14]到$ entry [30]或其他东西收集所有值。有没有办法只为那些选定的数组部分做一个foreach循环或其他东西?
我目前的解决方案相当重复。
$valuesArray = array($entry["14"], $entry["15"], $entry["16"], $entry["17"], $entry["18"], $entry["19"]);
$ entry的Var转储给出以下
array(30) {
["id"]=> string(2) "48"
["form_id"]=> string(1) "1"
["date_created"]=> string(19) "2016-10-27 13:30:24"
["is_starred"]=> int(0)
["is_read"]=> int(0)
["ip"]=> string(13) "..."
["source_url"]=> string(26) "http://examplesite.com/"
["post_id"]=> NULL
["currency"]=> string(3) "DKK"
["payment_status"]=> NULL
["payment_date"]=> NULL
["transaction_id"]=> NULL
["payment_amount"]=> NULL
["payment_method"]=> NULL
["is_fulfilled"]=> NULL
["created_by"]=> string(1) "1"
["transaction_type"]=> NULL
["user_agent"]=> string(82) ""
["status"]=> string(6) "active"
[9]=> string(14) "Jeg er en mand"
[10]=> string(9) "50-54 år"
[11]=> string(9) "Kommune 3"
[16]=> string(1) "3"
[15]=> string(1) "0"
[6]=> string(0) ""
[1]=> string(0) ""
[8]=> string(0) ""
[12]=> string(0) ""
[2]=> string(0) ""
[5]=> string(0) "" }
答案 0 :(得分:1)
您希望$entry[30]
通过for
?
PHP中的$newarray = array();
for ($x = 14; $x <= 30; $x++) {
//The number is $x;
$newarray[] = $entry[$x];
}
循环可以在一系列数字之间运行,并且可以工作:
UNPIVOT
答案 1 :(得分:1)
您可以使用多种功能,避免循环:
$keys = array_flip(range(14,30));
$result = array_intersect_key($entry, $keys);
range()
生成一个数组,其中包含您要比较的索引
array_flip()
将生成的数组值转换为数组键,因为您想要与数组键相交。
array_intersect_key
基本上做你需要的。
上面的例子也可以写成oneliner,但是......你知道可读性和那个;)
答案 2 :(得分:1)
是的,使用Array_Slice是最简单的解决方案:
$originalArray = $entry; //Example just to show what original array is
$startOffset = 14;
$newArray = array_slice($originalArray, $startOffset);
你也可以给它一个结束偏移量(又名长度)
$newArray = array_slice($originalArray, $startOffset, 16);
答案 3 :(得分:0)
我上面已经看到了答案,你也可以使用array_filter()
<?php
for($i = 0; $i <30; $i++)
{
$array[$i] = $i;
}
$filtered = array_filter(
$array,
function ($key){
return $key > 13;
},
ARRAY_FILTER_USE_KEY
);
var_dump($filtered);
这是demo