【问题标题】:make array of part of other array in php在php中制作其他数组的一部分
【发布时间】:2017-03-10 05:23:36
【问题描述】:

所以我正在努力从重力形式表单中收集大量数据,该表单将值存储在名为 $entry[] 的数组中。

我需要从 $entry[14] 到 $entry[30] 或其他类似的地方收集所有值。有没有办法只为数组的那些选定部分执行 foreach 循环或其他操作?

我目前的解决方案相当重复。

$valuesArray = array($entry["14"], $entry["15"], $entry["16"], $entry["17"], $entry["18"], $entry["19"]);

$entry 的变量转储给出以下结果

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) "" } 

【问题讨论】:

标签: php arrays wordpress gravity-forms-plugin


【解决方案1】:

您可以使用多种功能,避免循环:

$keys = array_flip(range(14,30));
$result = array_intersect_key($entry, $keys);

range() 生成一个包含您要比较的索引的数组。
array_flip() 将这样生成的数组 values 转换为数组 keys,因为您想要与数组键相交。
array_intersect_key 基本上可以满足您的需求。

上面的例子也可以写成oneliner,但是……你知道可读性和那个;)

【讨论】:

  • 这也很有魅力,谢谢!使用函数而不是循环通常更快吗?当然取决于情况和数据量。
  • 是的,通常首选使用those functions 而不是循环以获得更好的性能
【解决方案2】:

您想通过$entry[30] 获取$entry[14]

PHP 中的for 循环可以在一系列数字之间运行并且可以工作:

$newarray = array();
for ($x = 14; $x <= 30; $x++) {
    //The number is $x;
    $newarray[] = $entry[$x];
}

【讨论】:

  • 天哪,这太快了。像魅力一样工作,非常感谢!我从来没有真正理解过 for 循环,但这很有意义。
【解决方案3】:

是的,使用 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);

【讨论】:

    【解决方案4】:

    我已经看到上面的答案了,你也可以使用 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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-01-23
      • 1970-01-01
      • 1970-01-01
      • 2017-07-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多