【问题标题】:PHP get ranges of same values from arrayPHP从数组中获取相同值的范围
【发布时间】:2015-05-15 08:57:10
【问题描述】:

有什么方法可以获取相同值的键范围并创建一个新数组?

假设我们在 php 中有一个这样的数组:

$first_array = ['1'=>'a','2'=>'a','3'=>'a','4'=>'b','5'=>'b','6'=>'a','7'=>'a'];

我怎样才能得到这个数组?这个有什么功能吗?

$second_array = ['1-3'=>'a','4-5'=>'b','6-7'=>'a'];

【问题讨论】:

  • 你有没有尝试过
  • 在数组中计算 a,在数组中计算 b。创建新数组
  • as 是否总是与连续的数字相关联?如果不是,无论它们出现在哪里,输出是否应该反映它们的外观或“分组”它们?请说得更具体些。
  • 是您要分组的键具有特定值(或相同)吗?

标签: php arrays key range


【解决方案1】:

遍历它,提取键,生成范围并插入新数组 -

$first_array = ['1'=>'a','2'=>'a','3'=>'a','4'=>'b','5'=>'b'];

$flip = array();
foreach($first_array as $key => $val) {
  $flip[$val][] = $key;
}

$second_array = [];
foreach($flip as $key => $value) {
    $newKey = array_shift($value).' - '.end($value);
    $second_array[$newKey] = $key;
}

输出

array(2) {
  ["1 - 3"]=>
  string(1) "a"
  ["4 - 5"]=>
  string(1) "b"
}

【讨论】:

  • thanks.but 它不适用于像这样的一些数组:$first_array = ['1'=>'a','2'=>'a','3'=>' a','4'=>'a','5'=>'a','6'=>'b','7'=>'b','8'=>'a','9 '=>'a'];
  • 你有添加检查。
  • 正如@Amirabbasasadi 指出的那样,这并不总是有效。我有同样的问题。在下面查看我的答案。
  • 这不适用于相同的值,因为数组不能多次具有相同的键。在这种情况下,您必须使用子数组。
【解决方案2】:

关于您的第一个问题,您可以使用 foreach() 循环获取每个值的范围。

$first_array = ['1'=>'a','2'=>'a','3'=>'a','4'=>'b','5'=>'b'];

foreach($first_array as $key=>$value)
{
        //do your coding here, $key is the index of the array and $value is the value at that range, you can use that index and value to perform array manipulations
}

关于您的第二个问题,目前尚不清楚要在那里实施什么。但是你想做的任何事情,比如创建一个修改了索引的新数组和其他事情都可以在这个foreach()循环本身内完成

希望对你有帮助。

【讨论】:

    【解决方案3】:

    如果有人仍在寻找答案,这就是我所做的。 给定数组

    $first_array = ['0'=>'a',
                    '1'=>'a',
                    '2'=>'a',
                    '3'=>'a',
                    '4'=>'a',
                    '5'=>'b',
                    '6'=>'b',
                    '7'=>'a',
                    '8'=>'a']
    

    我构建了一个多维数组,其中每个元素都是一个由另外三个元素组成的数组:

    [0] - The value in the first array
    [1] - The key where the value starts repeating
    [2] - The last key where the value stops repeating
    

    代码

    $arrayRange = [];
    
    for($i = 0; $i < count($first_array); $i++){
    
        if(count($arrayRange) == 0){
            // The multidimensional array is still empty
            $arrayRange[0] = array($first_array[$i], $i, $i);
        }else{
            if($first_array[$i] == $arrayRange[count($arrayRange)-1][0]){
                // It's still the same value, I update the value of the last key
                $arrayRange[count($arrayRange)-1][2] = $i;
            }else{
                // It's a new value, I insert a new array
                $arrayRange[count($arrayRange)] = array($first_array[$i], $i, $i);
            }
        }
    }
    

    这样你就可以得到一个像这样的多维数组:

    $arrayRange[0] = array['a', 0, 4]; 
    $arrayRange[1] = array['b', 5, 6];
    $arrayRange[2] = array['a', 7, 8];
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-14
      • 1970-01-01
      • 2017-09-09
      • 2021-12-03
      • 1970-01-01
      • 2021-09-12
      相关资源
      最近更新 更多