我对从数组中获取第一个和最后一个值有点困惑。我尝试使用
explode()
函数,但我的逻辑无法正常工作,而且逻辑非常愚蠢。
我的阵列
Array
(
[0] => 500 - 1112
[1] => 1113 - 2224
[2] => 2225 - 4446
[3] => 4446
)
我试过这个方法
$range = explode(',', $price_range);
$count = count($range);
if (1 == $count) {
$price_1 = $range[0];
$ranges['range1'] = explode(' - ', $price_1);
} else if (2 == $count) {
$price_1 = $range[0];
$price_2 = $range[1];
$ranges['range1'] = explode(' - ', $price_1);
$ranges['range2'] = explode(' - ', $price_2);
} else if (3 == $count) {
$price_1 = $range[0];
$price_2 = $range[1];
$price_3 = $range[2];
$ranges['range1'] = explode(' - ', $price_1);
$ranges['range2'] = explode(' - ', $price_2);
$ranges['range3'] = explode(' - ', $price_3);
} else if (4 == $count) {
$price_1 = $range[0];
$price_2 = $range[1];
$price_3 = $range[2];
$price_4 = $range[3];
$ranges['range1'] = explode(' - ', $price_1);
$ranges['range2'] = explode(' - ', $price_2);
$ranges['range3'] = explode(' - ', $price_3);
$ranges['range4'] = explode(' - ', $price_4);
}
$array = call_user_func_array('array_merge', $ranges);
sort($array);
$min = reset($array);
$max = end($array);
根据我的数组,我想要在数组中获取单个值,例如
Array
(
[0] => 500 - 1112
[1] => 1113 - 2224
[2] => 2225 - 4446
[3] => 4446
)
所以我想转换这个数组,如下所示,
Array
(
[0] => array(
[0] => 500
[1] => 1112
[2] => 1113
[3] => 2224
[4] => 2225
[5] => 4446
)
[1] => 4446
)
并从该数组中获取
Array ( [0] => array(
的最小值和最大值。有没有简单的方法可以做到这一点?
如果我正确理解你的示例,你为它提供了参数
$count
到 2
。
所以,这可能是我对您的请求的版本:
<?php
$data[] = '500 - 1112';
$data[] = '1113 - 2224';
$data[] = '4446';
<?php
function explodeRanges(array $data, $counter, $explode = '-') {
$return = [];
// We take the correct number of rows
foreach( array_slice($data, 0, $counter) as $value ) {
$return = array_merge(
$return,
array_map('trim', explode($explode, $value))
);
// trim() function mapped on each elements to clean the data (remove spaces)
// explode all values by the separator
}
return $return;
}
<?php
for( $i = 1 ; $i <= 4 ; $i++ ) {
$range = explodeRanges($data, $i);
echo 'For ', $i, ' => [', implode(', ', $range), ']; MIN = ', min($range), '; MAX = ', max($range);
echo '<hr />';
}
For 1 => [500, 1112]; MIN = 500; MAX = 1112
For 2 => [500, 1112, 1113, 2224]; MIN = 500; MAX = 2224
For 3 => [500, 1112, 1113, 2224, 4446]; MIN = 500; MAX = 4446
For 4 => [500, 1112, 1113, 2224, 4446]; MIN = 500; MAX = 4446
如果您需要多次重复您的代码,那是因为您可以改进它。这里功能简单,速度很快。
我不理解上下文/业务逻辑,但我无法提供脚本来提取、分组和展平该数据集。对于函数式编程,这是
array_reduce()
的工作。 要将数字解析为 int 类型值,请使用 sscanf()
,然后有条件地将提取的数据推入结果中。 演示
var_export(
array_reduce(
$array,
function ($result, $v) {
if (sscanf($v, '%d - %d', $ints[], $ints[]) === 2) {
$result[0] ??= [];
array_push($result[0], ...$ints);
} else {
$result[1] = $ints[0];
}
return $result;
},
[]
)
);
输出:
array (
0 =>
array (
0 => 500,
1 => 1112,
2 => 1113,
3 => 2224,
4 => 2225,
5 => 4446,
),
1 => 4446,
)