在 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