2016-12-18 4 views
0

配列から最初と最後の値を取得するのはちょっと混乱します。そして私はexplode()機能を使用しようとしましたが、私のロジックが正しく動作しておらず、非常に愚かなロジックです。私は配列にどのようにPHPで配列を分割するには?

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(までminとmaxを取得します。彼らのやり方は簡単です。事前

+0

なぜ '2225'が省略されていますか?あなたのロジックを具体化してください – RomanPerekhrest

+0

@RomanPerekhrest私は価格チェックボックス値段のチェックボックスの値の4つのタイプのようなフロントエンドを渡しています –

+0

再び、なぜ '2225'が省略されますか? – RomanPerekhrest

答えて

0

おかげで私が正しくあなたの例を理解していれば、あなたは2にパラメータ$countでそれを提供します。

だから、これはあなたの要求の私のバージョンが考えられます。

データ

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

コードを何度も繰り返す必要がある場合は、改善することができます。ここでは、簡単な関数で簡単です。

関連する問題