2010-08-06 93 views
0

我需要以下方案的建議。在php中使用多個if語句時的問題

我有一個名爲$ data的php變量,它包含很多信息。我試圖使用函數explode將數據分解成片段。 在將它們分解爲n個片段之後,我循環遍歷它們,並在array1中存儲大約50行,即array2中的50-100行,依此類推。

$data = explode("\n" , $data , 388); 

$x = 27; 
while($x < 72 and $x>=27){$arr["x2"] .= $data[$x] . "\n"; 
    $x++;} 

$x = 72; 
while($x < 117 and $x>=72){$arr["x3"] .= $data[$x] . "\n"; 
    $x++;} 

$x = 117; 
while($x < 162 and $x>=117){$arr["x4"] .= $data[$x] . "\n"; 
    $x++;} 

$x = 162; 
while($x < 207 and $x>=162){$arr["x5"] .= $data[$x] . "\n"; 
    $x++;} 

$x = 207; 
while($x < 252 and $x>=207){$arr["x6"] .= $data[$x] . "\n"; 
    $x++;} 

$x = 252; 
while($x < 297 and $x>=252){$arr["x7"] .= $data[$x] . "\n"; 
    $x++;} 

$x = 297; 
while($x < 342 and $x>=297){$arr["x8"] .= $data[$x] . "\n"; 
    $x++;} 

$x = 342; 
while($x < 387 and $x>=342){ 
    $arr["x9"] .= $data[$x] . "\n"; 
    $x++;} 

$x = 387; 
if(!empty($data[$x])){$arr["x10"] .= $data[$x]; 
     $x++;} 

如果我發現$ arr [「x10」]不是空的,那麼我打印sample10.pdf。

如果上面是不是真的,然後我檢查$改編[「X9」],如果這是真的話,我打印sample9.pdf.Like以下

if(!empty($arr["x10"])){template='https://www.xyz.com/folder/pdf/sample10.pdf';} 
if(!empty($arr["x9"])){template='https://www.xyz.com/folder/pdf/sample9.pdf';} 
if(!empty($arr["x8"])){template='https://www.xyz.com/folder/pdf/sample8.pdf';} 
if(!empty($arr["x7"])){template='https://www.xyz.com/folder/pdf/sample7.pdf';} 
if(!empty($arr["x6"])){template='https://www.xyz.com/folder/pdf/sample6.pdf';} 
if(!empty($arr["x5"])){template='https://www.xyz.com/folder/pdf/sample5.pdf';} 
if(!empty($arr["x4"])){template='https://www.xyz.com/folder/pdf/sample4.pdf';} 
if(!empty($arr["x3"])){template='https://www.xyz.com/folder/pdf/sample3.pdf';} 
if(!empty($arr["x2"])){template='https://www.xyz.com/folder/pdf/sample2.pdf';} 
if(empty($arr["x2"])){template='https://www.xyz.com/folder/pdf/sample.pdf';} 

我試圖執行該代碼,但代碼只是掛起,它給了我一個錯誤。我試圖寫一個switch case,但不知道如何繼續。 任何幫助代碼將不勝感激。 在此先感謝。

+0

是否有意義? IE中的數據總是結構化的,相同的? – Doon 2010-08-06 02:09:02

+0

yes.it將包含字母數字字符 – swathi 2010-08-06 02:11:06

+0

如果您不希望其他人執行您可能應該使用'else if'而不是if。否則,您可能會發生兩個或更多打印語句。 – CEich 2010-08-06 02:11:32

回答

1

首先,你爲什麼不嘗試這樣它會工作:

$data = explode("\n" , $data , 388); 

for ($x = 27; $x < 342; $x++){ 
    $subarr = (($x-27)/50)+2; 
    $arr['x'.$subarr] .= $data[$x] . "\n"; 
} 

for ($i = 2; $i <= 10; $i++) { 
    if (!empty($arr['x'.$i])) { 
     template='https://www.xyz.com/folder/pdf/sample'.$i.'.pdf'; 
    } 
} 

。 ..但我不確定你想用「template =」行做什麼。這不是有效的PHP,所以我不知道它應該做什麼。

6

這是乞求一些明智的數組使用(如果不是對象)。

首先,您將以45個塊爲單位劃分您的數組,跳過前27個元素。您可以刪除使用array_splice()第27個要素:

array_splice($data, 0, 27); 

然後,您似乎創造45元的塊。這種稱爲array_chunk()的內置功能。

$chunks = array_chunk($data, 45); 

你正在用換行符將這些塊附加在一起。有這樣做太更簡單的方法:

$templates = array(); 
foreach ($chunks as $chunk) { 
    templates = implode("\n", $chunk); 
} 

但可以使用array_map()做的更好:

function concat(array $arr) { 
    return implode("\n", $arr); 
} 

$data = array_map('concat', $chunks); 

把那完全變成大多數代碼到幾行(假設concat()):

$data = explode("\n", $data, 388); 
array_splice($data, 0, 27); 
$data = array_map('concat', $data); 

從該數組中您應該能夠找出哪些是相關的缺失條目並根據數組中的索引號打印樣本。完全不需要複雜的if系列。

給你舉個例子:

$text = <<<END 
one 
two 
three 
four 
five 
six 
seven 
eight 
END; 
$data = explode("\n", $text); 
print_r($data); 

輸出:

Array 
(
    [0] => one 
    [1] => two 
    [2] => three 
    [3] => four 
    [4] => five 
    [5] => six 
    [6] => seven 
    [7] => eight 
) 

則:

$data = array_chunk($data, 3); 
print_r($data); 

輸出:

Array 
(
    [0] => Array 
     (
      [0] => one 
      [1] => two 
      [2] => three 
     ) 

    [1] => Array 
     (
      [0] => four 
      [1] => five 
      [2] => six 
     ) 

    [2] => Array 
     (
      [0] => seven 
      [1] => eight 
     ) 

) 

最後:

function concat(array $arr) { 
    return implode("\n", $arr); 
} 

$data = array_map('concat', $data); 
print_r($data); 

輸出:

Array 
(
    [0] => one 
two 
three 
    [1] => four 
five 
six 
    [2] => seven 
eight 
) 
+0

在此之前添加一個'array_splice($ data,0,28);'。 – Wrikken 2010-08-06 02:14:26

1

問題是template不是一個變量 - 最起碼,你是不是在你的代碼,將其定義爲這樣的。雖然這裏你一般的做法是有點誤導,我相信,如果你改變template$template(注意$

+0

你說得對。我忘了在模板的前面添加$,在這裏 – swathi 2010-08-06 10:11:27

0

首先,如果這些公司可以減少到一個循環(使用1,2 ...而不是X1,X2,...)

$arr = Array(); 
for($i=0;$data[$i];i++) { 
    for ($j = 0; $j < 10; $j++) { 
     $arr[i].= $data[50*$i+$j] . "\n"; 
    } 
} 

foreach($arr as $key => $val) { 
    $template="https://www.xyz.com/folder/pdf/sample$key.pdf"; 
} 

我認爲,隨着$模板贏得了最後的部分不要做你想找的東西,但那就是你在那裏。

0

我相信你存儲$ [26]在其他變量的數據[0]到$數據?

一個建議是索引值從$數據到$ ARR使用公式

$i = ($x - 27)/45 + 1映射,

其中$ x是$數據的索引值和$ i是希望的索引號在$ arr中使用。

for($x=27;$x<388;$x++) 
{ 
    $i = ($x - 27)/45 + 1; 
    if (isset($arr["x".$i])) 
    { 
    $arr["x".$i] .= $data[$x] . "\n"; 
    } 
    else 
    { 
    $arr["x".$i] = $data[$x] . "\n"; 
    } 
} 

一個溫和的建議,但我希望它有幫助。