在php中使用多个if语句时出现问题

时间:2010-08-06 02:03:50

标签: php

我需要针对以下情况提出建议。

我有一个名为$ data的php变量,它包含大量信息。我正在尝试使用函数explode将数据分解为片段。 在将它们爆炸成n个片段之后,我遍历它们并在array150-100行中存储大约50行,依此类推。

   $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。

如果以上不是真的,那么我检查是否$ arr [“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但我不知道如何继续这个。 任何有关代码的帮助将不胜感激。 提前谢谢。

5 个答案:

答案 0 :(得分:6)

这是一个明智的数组使用(如果不是对象)。

首先,你是在跳过前27个元素的45个块中分解你的数组。您可以使用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
)

答案 1 :(得分:1)

问题是template不是变量 - 至少,你没有在代码中定义它。虽然您的一般方法在某种程度上是错误的,但我相信如果您将template更改为$template(请注意$

答案 2 :(得分: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,所以我不知道它应该做什么。

答案 3 :(得分:0)

首先,那些if可以缩减为循环(使用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";
}

我认为使用$ template的最后一部分将无法满足您的需求,但这就是您所拥有的。

答案 4 :(得分:0)

我认为你将$ data [0]通过$ data [26]存储在其他变量中?

一个建议是使用公式

将索引值从$ data映射到$ arr

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

其中$ x是$ data中的索引值,$ 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";
   }
 }

一个温和的建议,但我希望它有所帮助。