在php中制作其他数组的一部分数组

时间:2016-10-27 13:39:22

标签: php arrays wordpress gravity-forms-plugin

所以我正在努力从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) "" } 

4 个答案:

答案 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