PHP Array взорвать одно значение - PullRequest
1 голос
/ 09 февраля 2012

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

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

Пример:

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

Я хочу взорвать это значение и закончить следующим циклом:

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

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

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

Ответы [ 4 ]

1 голос
/ 09 февраля 2012

Вы можете использовать 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 и цикл while, будет работать и следующее:

$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 голосов
/ 09 февраля 2012

Вы можете использовать такой цикл (используя 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){}
0 голосов
/ 09 февраля 2012

Вначале взорваться на ;. Затем в цикле for, увеличивающемся на 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 голосов
/ 09 февраля 2012

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

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