PHP选择数组元素

时间:2013-12-12 13:06:31

标签: php arrays function dynamic preg-match

<?php
echo '<pre>';

$pid = '129';

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


function buildid($pid,$key,$val){
    $id = $pid.'-'.$key.'-'.$val;
    // echo '<br>';

    if (preg_match("/\|/",$id)){
        $id = explode("|",$id);
        print_r($id);
    }
    return;
}

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

echo '</pre>';
?>

执行上面的代码,您将获得使用$id处理的所有数据,但我的要求是,如果我找到$id |,我希望如下,

案例2:我还希望像"STY"=>"Z",这样的键和值没有|,但我想要值。 那么我有没有办法选择STYQTYOTY这样的密钥并处理它们?

目前的输出:

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

预期输出:

129-QTY-A
129-QTY-F
129-OTY-Q
129-OTY-G
129-OTY-T
129-OTY-Y

2 个答案:

答案 0 :(得分:1)

在爆炸$ val后生成$ id将解决此问题。

function buildid($pid,$key,$val){
        if (preg_match("/\|/",$val)){
            $val = explode("|",$val);
            foreach($val as $val1)
            {
                 $id = $pid.'-'.$key.'-'.$val1;
                 echo "<br>";       
                 print_r($id);
            }    
       }
  }

答案 1 :(得分:0)

function buildid($pid,$key,$val){

    if (preg_match("/\|/",$val)){
        $id = explode("|",$val);
        $data = array();
        foreach($id as $entity){
          $data[] = $pid.'-'.$key.'-'.$entity;
        }
        print_r($data);
    }
    return;
}