【问题标题】:PHP create new array by slicingPHP通过切片创建新数组
【发布时间】:2017-11-30 00:18:23
【问题描述】:

我有一个数组类型为'months' => 'txt for ppl'

$timeArr = [
            '1' => '1 месяц',
            '3' => '3 месяца',
            '6' => '6 месяцев',
            '9' => '9 месяцев',
            '12' => '1 год',
            '18' => '1,5 года',
            '24' => '2 года',
            '36' => '3 года',
            '48' => '4 года',
            '60' => '5 лет',
            '72' => '6 лет',
            '84' => '7 лет',
            '120' => '10 лет',
            '180' => '15 лет',
            '240' => '20 лет',
            '300' => '25 лет',
            '360' => '30 лет',
        ];

我的想法是创建一个函数来只返回我想要的时间段。例如,函数 period($from, $to): period(240, 360) 将返回从键 '240' 到键 '360' 的 key=> 值数组。但我不知道如何在没有循环的情况下制作它。

【问题讨论】:

  • 你有什么问题?
  • 在您的数组中,这些键是数字键还是字符串?是有序还是无序?

标签: php arrays slice


【解决方案1】:

尝试下面的代码按键获取范围数组。

它返回范围值,它是来自$timeArr的键。

PHP

<?php
function period($from,$to){
    $timeArr = [
        '1' => '1 месяц',
        '3' => '3 месяца',
        '6' => '6 месяцев',
        '9' => '9 месяцев',
        '12' => '1 год',
        '18' => '1,5 года',
        '24' => '2 года',
        '36' => '3 года',
        '48' => '4 года',
        '60' => '5 лет',
        '72' => '6 лет',
        '84' => '7 лет',
        '120' => '10 лет',
        '180' => '15 лет',
        '240' => '20 лет',
        '300' => '25 лет',
        '360' => '30 лет',
    ];
    $newArr = array();
    $range = range($from,$to);
    $newArr = array_intersect_key($timeArr, array_flip($range));
    return $newArr;
}
?>

用法

<?php
    $newArray = period(240,360);
    echo "<pre>";
    print_r($newArray);
?>

输出

Array
(
    [240] => 20 лет
    [300] => 25 лет
    [360] => 30 лет
)

【讨论】:

    【解决方案2】:

    可以这样使用array_slice,可以查看live demo here

    $indexes = array_flip(array_keys($timeArr));
    $results = array_slice($timeArr, $indexes[240], $indexes[360]);
    

    【讨论】:

      【解决方案3】:

      请尝试以下:

      function period($array, $keys)
      {
          return array_intersect_key($array, array_flip($keys));
      }
      
      $keys = array( '240', '300' );
      $results = period($timeArr, $keys);
      print_r($results);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-12-09
        • 1970-01-01
        • 2017-09-04
        • 1970-01-01
        • 1970-01-01
        • 2019-04-06
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多