2012-02-09 1 views
1

У меня есть массив с единственным значением, собранным из базы данных.PHP Array explode single value

Внутри цикла while я хочу взорвать это для каждых двух значений.

Пример:

$data = array('20;40;60;80;100;150;200;300;500;1000'); 

Я хочу, чтобы взорвать это значение и в конечном итоге со следующей петлей:

$lowprice = "20"; 
$highprice = "40"; 

я не смог найти никаких примеров.

Большое спасибо всем, кто ответил!

+0

ли вы имеете в виду вы хотите массив низких и высоких цен из цикла? или только первые два значения в массиве как низкие и высокие? –

+1

Вы хотите только первые 2 значения ..? Пожалуйста, объясните более четко. – Alasdair

ответ

1

Вы можете использовать preg_match_all().

Пример:

$text = '20;40;60;80;100;150;200;300;500;1000'; 

preg_match_all("/([^;]+);([^;]+)/", $text, $pairs, PREG_SET_ORDER); 

foreach ($pairs as $pair) { 
    // ... 
    $lowvalue = $pair[1]; 
    $highvalue = $pair[2]; 
    // ... 
} 

Если вы действительно должны использовать explode и время цикла, следующие будут работать:

$text = '20;40;60;80;100;150;200;300;500;1000'; 

$data = explode(';', $text); 

$i = 0; 
$count = count($data); 

while ($i < $count) { 
// ... 
    $lowvalue = $data[$i++]; 
    $highvalue = $data[$i++]; 
// ... 
} 
+0

Большое спасибо: D –

0

Если вы просто хотите, первые и вторые значения, как ваш низкий/высокий:

$data = array('20;40;60;80;100;150;200;300;500;1000'); 
list($lowprice,$highprice) = explode(';',current($data)); 

echo '$lowprice=',$lowprice,PHP_EOL; 
echo '$highprice=',$highprice,PHP_EOL; 

Если вы хотите массив минимумов и максимумов:

$data = array('20;40;60;80;100;150;200;300;500;1000'); 
$lowprices = $highprices = array(); 
$data = explode(';',current($data)); 
$dataCount = count($data); 
var_dump($data); 
for ($i=0; $i < $dataCount; $i += 2) { 
    $lowprices[] = $data[$i]; 
    $highprices[] = $data[$i+1]; 
} 
echo '$lowprices='; 
var_dump($lowprices); 
echo '$highprices='; 
var_dump($highprices); 

EDIT

Почему бы не начать с правильного массива значений в первую очередь: это упростило бы это много

$data = array(20,40,60,80,100,150,200,300,500,1000); 
list($lowprice,$highprice) = $data; 

echo '$lowprice=',$lowprice,PHP_EOL; 
echo '$highprice=',$highprice,PHP_EOL; 

или

$data = array(20,40,60,80,100,150,200,300,500,1000); 
$lowprices = $highprices = array(); 
$dataCount = count($data); 
var_dump($data); 
for ($i=0; $i < $dataCount; $i += 2) { 
    $lowprices[] = $data[$i]; 
    $highprices[] = $data[$i+1]; 
} 
echo '$lowprices='; 
var_dump($lowprices); 
echo '$highprices='; 
var_dump($highprices); 
+0

'count ($ data)' будет 1. Он определяет массив с одним элементом. Просто удалите 'array()' из строк 'data ='. – Leigh

+0

@Leigh - уже исправлено, с соответствующими комментариями о создании массива в первую очередь –

0

Разнесение первоначально на ;. Затем в цикле увеличивается на 2, вы можете назначить текущий и следующий значения к югу от массива:

$initarray = explode(";", "20;40;60;80;100;150;200;300;500;1000"); 
$num = count($initarray); 

// Main array to hold subarrays 
$outputarray = array(); 
for ($i=0; $i<$num; $i=$i+2) { 
    // Add the current pair ($i and $i+1) to a sub-array 
    $outputarray[] = array("lowprice"=>$initarray[$i], "highprice"=>$initarray[$i+1]); 
} 

Выходы:

Array 
(
    [0] => Array 
     (
      [lowprice] => 20 
      [highprice] => 40 
     ) 

    [1] => Array 
     (
      [lowprice] => 60 
      [highprice] => 80 
     ) 

    [2] => Array 
     (
      [lowprice] => 100 
      [highprice] => 150 
     ) 

    [3] => Array 
     (
      [lowprice] => 200 
      [highprice] => 300 
     ) 

    [4] => Array 
     (
      [lowprice] => 500 
      [highprice] => 1000 
     ) 

) 
0

Вы можете использовать цикл как этот (с использованием explode() и array_shift()) :

$data = explode(';', '20;40;60;80;100;150;200;300;500;1000'); 
while(count($data) > 1){ 
    $lowprice = array_shift($data); 
    $highprice = array_shift($data); 
} 

Или используйте for петля (должна быть более эффективной, чем вызов count() в каждой итерации):

$count = count($data); 
for($i = 0; $i < $count; $i+=2){} 

 Смежные вопросы

  • Нет связанных вопросов^_^