2016-12-18 1 views
0

Je suis un peu confus pour obtenir la première et dernière valeur de tableau. Et j'ai essayé d'utiliser la fonction explode() mais ma logique ne fonctionne pas correctement et la logique très stupide.Comment diviser un tableau en php?

Mon tableau

Array 
(
    [0] => 500 - 1112 
    [1] => 1113 - 2224 
    [2] => 2225 - 4446 
    [3] => 4446 
) 

J'ai essayé cette façon

$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); 

Selon mon tableau, je veux si dans le tableau d'obtenir seule valeur dans le tableau par exemple

Array 
(
    [0] => 500 - 1112 
    [1] => 1113 - 2224 
    [2] => 2225 - 4446 
    [3] => 4446 
) 

Je veux pour convertir ce tableau comme indiqué ci-dessous,

Array 
(
    [0] => array(
     [0] => 500 
     [1] => 1112 
     [2] => 1113 
     [3] => 2224 
     [4] => 2225 
     [5] => 4446 
     ) 
    [1] => 4446 
) 

Et obtenir min et max de Array ([0] => array( à partir de cette matrice. Est-ce leur façon simple de faire.

Merci à l'avance

+0

pourquoi '2225' est omis? élaborer votre logique – RomanPerekhrest

+0

@RomanPerekhrest je suis en train de passer l'extrémité avant des prix comme quatre types de case à cocher de prix ce tableau est à nouveau la valeur de case à cocher –

+0

, pourquoi '2225' est omis? – RomanPerekhrest

Répondre

0

Si je comprends bien votre exemple, vous avez fourni avec le paramètre $count-2.

Donc, cela pourrait être ma version de votre demande:

Les données

<?php 
$data[] = '500 - 1112'; 
$data[] = '1113 - 2224'; 
$data[] = '4446'; 

La fonction

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

La sortie

<?php 
for($i = 1 ; $i <= 4 ; $i++) { 
    $range = explodeRanges($data, $i); 

    echo 'For ', $i, ' => [', implode(', ', $range), ']; MIN = ', min($range), '; MAX = ', max($range); 
    echo '<hr />'; 
} 

... et le résultat :)

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 

Si vous devez répéter votre code plusieurs fois, c'est parce que vous pouvez l'améliorer. Ici, c'est rapide avec une fonction simple.