2013-12-14 46 views
0
<?php 
echo '<pre>'; 
error_reporting(E_ALL); 

$pid = '129'; 

$families = array 
(
     "Griffin"=>array 
         (
         "PTY"=>"Peter", 
         "STY"=>"X", 
         "QTY"=>"A|F" 
        ), 
     "Quagmire"=>array 
         (
         "NTY"=>"Glenn" 
        ), 
     "Brown"=>array 
        (
        "FTY"=>"Cleveland", 
        "OTY"=>"Q|G|T|Y", 
        "PTY"=>"Junior" 
       ) 
); 

global $allid; 

$allid = array(); 
function buildid($pid,$key,$val){ 

    if (preg_match("/\|/",$val)){ 
     $val = explode("|",$val); 
      foreach($val as $val1){ 
       $id = $pid.'-'.$key.'-'.$val1; 
       $allid[] = $id; 

      } 
    } 
} 

print_r($allid); 

foreach($families as $familieskey=>$familiesvalue){ 
    foreach($familiesvalue as $skey=>$sval){ 
     buildid($pid,$skey,$sval); 
    } 
} 
echo '</pre>'; 
?> 

预期输出为上述代码:PHP数组空的功能以外

情况1:

Array 
    (
     [0] => 129-QTY-A 
     [1] => 129-QTY-F 
    ) 
    Array 
    (
     [0] => 129-OTY-Q 
     [1] => 129-OTY-G 
     [2] => 129-OTY-T 
     [3] => 129-OTY-Y 
    ) 

情况2:

Array 
    (
     [0] => 129-QTY-A 
     [1] => 129-QTY-F 
     [2] => 129-OTY-Q 
     [3] => 129-OTY-G 
     [4] => 129-OTY-T 
     [5] => 129-OTY-Y 
    ) 
+0

使用相同的代码与不同的逻辑也可以重复吗? – Neocortex

回答

3

global $allid;进入功能本身,而不是外,即使用

function buildid($pid,$key,$val){ 
     global $allid; 
     if (preg_match("/\|/",$val)){ 
    ... 

documentation该指出

global关键字之外的功能不是错误。如果文件包含在函数中,则可以使用它。

- >除非你从函数中包含它,否则它没有任何作用。

修改添加:您还需要在运行代码后(即在echo '</pre>';之前)放置print_r - 当前,您在初始化数组后显示阵列的内容,然后用数据填充它,然后你的程序结束。

+0

不,它不工作。我得到一个emtpy数组! – Neocortex

+2

只是注意到还有一个额外的问题:您首先执行print_r,然后*实际运行代码。您需要将print_r放在代码的* end *处。 –

0

首先。在设置此数组之前,您先制作print_r($allid)。您只在“foreach($families as $familieskey=>$familiesvalue){ ...”中执行了此操作。]

Second.Done。

TRY

error_reporting(E_ALL); 

$pid = '129'; 

$families = array 
(
     "Griffin"=>array 
         (
         "PTY"=>"Peter", 
         "STY"=>"X", 
         "QTY"=>"A|F" 
        ), 
     "Quagmire"=>array 
         (
         "NTY"=>"Glenn" 
        ), 
     "Brown"=>array 
        (
        "FTY"=>"Cleveland", 
        "OTY"=>"Q|G|T|Y", 
        "PTY"=>"Junior" 
       ) 
); 


function buildid($pid,$key,$val){ 
global $allid; 
    if (preg_match("/\|/",$val)){ 
     $val = explode("|",$val); 
      foreach($val as $val1){ 
       $id = $pid.'-'.$key.'-'.$val1; 
       $allid[] = $id; 

      } 
    } 
} 



foreach($families as $familieskey=>$familiesvalue){ 
    foreach($familiesvalue as $skey=>$sval){ 
     buildid($pid,$skey,$sval); 
    } 
} 


print_r($allid); 
+0

你可以重新短语,你的答案不清楚! – Neocortex

0

要设置其值之前输出阵列。所以代码应该是这样的。 您的函数buildid()在输出数组之前已定义但未调用。 so print_r($ allid);应该在它的值在foreach循环中被填充后调用。

<?php 
echo '<pre>'; 
error_reporting(E_ALL); 

$pid = '129'; 

$families = array 
(
    "Griffin"=>array 
    (
     "PTY"=>"Peter", 
     "STY"=>"X", 
     "QTY"=>"A|F" 
    ), 
    "Quagmire"=>array 
    (
     "NTY"=>"Glenn" 
    ), 
    "Brown"=>array 
    (
     "FTY"=>"Cleveland", 
     "OTY"=>"Q|G|T|Y", 
     "PTY"=>"Junior" 
    ) 
); 

$allid = array(); 

function buildid($pid,$key,$val){ 
    //Global should be inside function like this. 
    global $allid; 
    if (preg_match("/\|/",$val)){ 
     $val = explode("|",$val); 
     foreach($val as $val1){ 
      $id = $pid.'-'.$key.'-'.$val1; 
      $allid[] = $id; 

     } 
    } 
} 

foreach($families as $familieskey=>$familiesvalue){ 
    foreach($familiesvalue as $skey=>$sval){ 
     buildid($pid,$skey,$sval); 
    } 
} 
print_r($allid); 
echo '</pre>'; 
?> 
+0

对不起老兄!已经由Jan Schejbal回复了 – Neocortex