PHP数组分解单个值

PHP数组分解单个值,php,arrays,explode,Php,Arrays,Explode,我有一个数组,其中包含从数据库收集的单个值 在一个while循环中,我希望每两个值分解一次 例如: $data = array('20;40;60;80;100;150;200;300;500;1000'); $text = '20;40;60;80;100;150;200;300;500;1000'; preg_match_all("/([^;]+);([^;]+)/", $text, $pairs, PREG_SET_ORDER); foreach ($pairs as $pair)

我有一个数组,其中包含从数据库收集的单个值

在一个while循环中,我希望每两个值分解一次

例如:

$data = array('20;40;60;80;100;150;200;300;500;1000');
$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];
    // ...
}
我希望分解此值并以以下循环结束:

$lowprice = "20";
$highprice = "40";
我找不到任何这样的例子


非常感谢所有回答的人

如果您只想将第一个和第二个值作为低/高值:

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

$data=array(20,40,60,801001502003005001000);
$lowprices=$highprices=array();
$dataCount=计数($data);
var_dump($数据);
对于($i=0;$i<$dataCount;$i+=2){
$lowprices[]=$data[$i];
$highprices[]=$data[$i+1];
}
回声“$lowprices=”;
var_dump(低价);
回音“$highprices=”;
var_dump(高价);

最初在
上爆炸。然后在递增2的for循环中,可以将当前值和下一个值指定给子数组:

$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]);
}
你可以用

例如:

$data = array('20;40;60;80;100;150;200;300;500;1000');
$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++];
// ...
}
$text='20;40;60;80;100;150;200;300;500;1000';
$data=分解(“;”,$text);
$i=0;
$count=计数($data);
而($i<$count){
// ...
$lowvalue=$data[$i++];
$highvalue=$data[$i++];
// ...
}

您可以像这样使用循环(使用and):

或者对
循环使用
(应该比在每次迭代中调用
count()
更有效):

$count=计数($data);
对于($i=0;$i<$count;$i+=2){}

您的意思是希望从循环中获得一系列低价和高价?或者只是数组中的前两个值,即低值和高值?您只想要前两个值。。?请解释清楚。
count($data)
将为1。他正在用一个元素定义一个数组。只需从
数据=
行中删除
array()
。@Leigh-已修复,并提供了关于首先创建数组的适当注释
$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++];
// ...
}
$data = explode( ';', '20;40;60;80;100;150;200;300;500;1000');
while( count( $data) > 1){
    $lowprice = array_shift( $data);
    $highprice = array_shift( $data);
}
$count = count( $data);
for( $i = 0; $i < $count; $i+=2){}