我需要针对以下情况提出建议。
我有一个名为$ 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但我不知道如何继续这个。 任何有关代码的帮助将不胜感激。 提前谢谢。
答案 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";
}
}
一个温和的建议,但我希望它有所帮助。