假设我有以下数据:
$data = array('av','ds','tg','ik','pk','np','rq');
我无法找到使用哪些工具来获取两个变量之间的字符串范围。
function sortrange ( $a, $b, $data )
{
return $range;
}
例如:
sortrange('ds','np', $data);
会返回
array('ds','tg','ik','pk','np');
我还希望能够进行向后排序,例如:
sortrange('np','tg');
会回来:
array('np','pk','ik','tg');
我发现可以使用的最接近的功能是usort,但它无法接近我想要的任何地方。
提前感谢您的帮助。 :)
答案 0 :(得分:1)
注意:以下函数将仅使用$ start和$ end的首次出现。如果他们重复,行为可能不是你所期望的。
function subset_range($array, $start, $end) {
$start_index = array_search($start, $array);
$end_index = array_search($end, $array);
$min = min($start_index, $end_index);
$max = max($start_index, $end_index);
$ret = array_slice($array, $min, $max - $min + 1);
return $start_index < $end_index ? $ret : array_reverse($ret);
}
$data = array('av','ds','tg','ik','pk','np','rq');
print_r(subset_range($data, 'ds', 'np'));
print_r(subset_range($data, 'np', 'tg'));
输出:
Array
(
[0] => ds
[1] => tg
[2] => ik
[3] => pk
[4] => np
)
Array
(
[0] => np
[1] => pk
[2] => ik
[3] => tg
)
答案 1 :(得分:0)
这样的事情:
function get_subset($a, $b, $data) {
// fail if $a or $b is not present in $data
if(in_array($a) === false || in_array($b) === false) {
return false;
}
// get the index of both $a and $b
$i_a = array_search($a, $data);
$i_a = array_search($b, $data);
$result = array();
if($i_a < $i_b) {
// if $a is earlier than $b in $data, loop forward
for($i = $i_a; $i <= $i_b; $i++) {
$result[] = $data[$i];
}
} elseif($i_a > $i_b) {
// if $a is later than $b in $data, loop backward
for($i = $i_a; $i <= $i_b; $i--) {
$result[] = $data[$i];
}
} else {
// if $a and $b are the same
return array($a, $b);
}
return $result;
}