在 php 中创建其他数组的一部分的数组
make array of part of other array in php
所以我正在努力从 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) "" }
您想通过$entry[30]
获得$entry[14]
吗?
PHP 中的 for
循环可以 运行 在一系列数字之间并且可以工作:
$newarray = array();
for ($x = 14; $x <= 30; $x++) {
//The number is $x;
$newarray[] = $entry[$x];
}
您可以混合使用函数,避免循环:
$keys = array_flip(range(14,30));
$result = array_intersect_key($entry, $keys);
range()
生成一个包含您要比较的索引的数组。
array_flip()
将如此生成的数组 values 转换为数组 keys,因为你想与数组键相交。
array_intersect_key
基本上可以满足您的需求。
上面的例子也可以写成单行代码,但是......你知道可读性等等;)
是的,使用 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);
我已经看到上面的答案了,你也可以使用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
所以我正在努力从 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) "" }
您想通过$entry[30]
获得$entry[14]
吗?
PHP 中的 for
循环可以 运行 在一系列数字之间并且可以工作:
$newarray = array();
for ($x = 14; $x <= 30; $x++) {
//The number is $x;
$newarray[] = $entry[$x];
}
您可以混合使用函数,避免循环:
$keys = array_flip(range(14,30));
$result = array_intersect_key($entry, $keys);
range()
生成一个包含您要比较的索引的数组。
array_flip()
将如此生成的数组 values 转换为数组 keys,因为你想与数组键相交。
array_intersect_key
基本上可以满足您的需求。
上面的例子也可以写成单行代码,但是......你知道可读性等等;)
是的,使用 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);
我已经看到上面的答案了,你也可以使用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