php在创建数组变量之前为其分配值

时间:2015-07-04 13:44:21

标签: php

程序1和程序2应该输出相同的值,但它们不是。为什么?如何在创建数组变量之前为其赋值?

<?php
echo "Program 1.<br>";
$col = array(1,3);
$data = array("123,234,345,456,567", "234,345,456,567,678");
$resultfinal = "";
for($i=0; $i<count($data); ++$i){
    $tempdata = explode(',',$data[$i]);
    for($j=0; $j<count($col); ++$j){
        $resultfinal .= ",".$tempdata[$col[$j]];
    }
    $resultfinal .= "<br>";
}
echo $resultfinal;

echo "Program 2.<br>";
$resultfinal2 = "";
$resultsub = "";
for($j=0; $j<count($col); ++$j){
    $resultsub .= ",".$tempdata2[$col[$j]]; 
} 
for($i=0; $i<count($data); ++$i){
    $tempdata2 = explode(',',$data[$i]);
    $resultfinal2 .= $resultsub."<br>";
}
echo $resultfinal2;

?>

输出:

Program 1.
,234,456
,345,567
Program 2.
error...

1 个答案:

答案 0 :(得分:0)

你无法以这种方式节省CPU时间。

稍微考虑一下:您需要处理来自$data所有项目(1个循环超过$data)。对于$data中的每个项目,您需要将其分解为多个部分,然后提取其索引存储在$col中的值。这是$col的每个项的另一个循环(超过$data

执行此操作的唯一方法是使用两个嵌套循环(外部循环覆盖$data,内循环覆盖$col),就像在程序1中一样。

如果您真的担心节省CPU时间(不是真正关心中小数据量),您可以尝试使用更少的PHP代码和更多internal PHP array functions(以移动循环和尽可能多的处理可以进入PHP的本机代码):

这是一个可能的解决方案:

// For array_intersect_key() we need an array having the values of $col as keys
$columns = array_combine($col, $col);

// Store the generated lines here
$output  = array();

// The outer loop over $data
foreach ($data as $item) {
    // Explode the item into pieces
    $pieces = explode(',', $item);
    // Move the inner loop into PHP native code; array_intersect_key() keeps
    // from $pieces the values having the same keys as $columns
    // implode() joins the extracted pieces back into a string
    $output[] = implode(',', array_intersect_key($pieces, $columns));
}
// Join the lines with <br>, output them
echo(implode("<br>\n", $output));