PHP 从数组中获取相同值的范围
PHP get ranges of same values from array
有什么方法可以获取相同值的键范围并创建一个新数组吗?
假设我们在 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'];
关于您的第一个问题,您可以使用 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()
循环本身
中完成
希望对您有所帮助。
遍历它,提取键,生成范围并插入到新数组 -
$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"
}
如果有人仍在寻找答案,这就是我所做的。
给定数组
$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];
有什么方法可以获取相同值的键范围并创建一个新数组吗?
假设我们在 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'];
关于您的第一个问题,您可以使用 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()
循环本身
希望对您有所帮助。
遍历它,提取键,生成范围并插入到新数组 -
$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"
}
如果有人仍在寻找答案,这就是我所做的。 给定数组
$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];