【问题标题】:How to split array in php?如何在php中拆分数组?
【发布时间】:2016-12-18 21:53:18
【问题描述】:

我有点困惑从数组中获取第一个和最后一个值。我尝试使用explode()function,但我的逻辑无法正常工作,而且逻辑非常愚蠢。

我的数组

 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( 获取最小值和最大值。他们有什么简单的方法吗。

提前致谢

【问题讨论】:

  • 为什么2225被省略了?阐述你的逻辑
  • @RomanPerekhrest 我正在通过价格前端像四种类型的价格复选框这个数组是价格复选框值
  • 再说一遍,为什么2225 被省略了?
  • @RomanPerekhrest 很抱歉我错过了2225
  • 那么,所有独立的项目都应该单独放置,一个范围内的所有项目都应该分组吗?您的预期结果中的最小值和最大值在哪里?

标签: php arrays sorting multidimensional-array dynamic-arrays


【解决方案1】:

如果我正确理解了您的示例,您提供的参数是 $count2

所以,这可能是您的请求的我的版本:

数据

<?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

如果您需要多次重复您的代码,那是因为您可以改进它。在这里,只需一个简单的功能即可快速完成。

【讨论】:

    猜你喜欢
    • 2013-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-12
    • 1970-01-01
    • 1970-01-01
    • 2018-01-02
    • 1970-01-01
    相关资源
    最近更新 更多