2012-02-09 6 views
1

私はデータベースから収集された単一の値を持つ配列を持っています。PHP配列単一値を爆発

whileループの中で、私はこれを2つの値ごとに分解したいと思います。

例:私はこれのいずれかの例を見つけることができませんでした

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

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

私は、この値を爆発し、次のループで終わりにしたいです。

多くの方に感謝します。

+0

意味しますか?または配列の最初の2つの値だけを低および高にしますか? –

+1

最初の2つの値だけが必要です。もっとはっきりと説明してください。 – Alasdair

答えて

1

を。

例:

$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

ありがとうございました:D –

0

あなたは自分の低/高として、第1および第2の値にしたい場合:

$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になります。彼は単一の要素を持つ配列を定義しています。 'data ='行から 'array()'を削除するだけです。 – Leigh

+0

@Leigh - 最初に配列を作成することについての適切なコメントを付けて、既に修正済み –

0

;に最初に爆発。そして、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]); 
} 

出力:あなたはpreg_match_all()を使用することができます

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()を使用して)この1のようなループを使用することができます:

$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){}