php garip bir dizi

3 Cevap php

Burada i genel amaçlı ana kök $ depId altında depIds bir dizi almak için değil, bir fonksiyon yazdım.

i dizisini almak için yineleme yöntemi kullanın:

public function getEmpsByDep($depId){
    $query = "select * from ".SQLPREFIX."department where id_parent=".$depId;
    $stmt=$this->db->query($query);     
    while(($row=$this->db->fetch_assoc($stmt))==true)
    {   
        if($this->hasChildNode($row['DEPID']))
        {
            $depId = $row['DEPID'];
            self::getEmpsByDep($depId);
        }
        else
        {
            $arr[]=$row['DEPID'];
        }
    }
    return ($arr);
}

Burada belirtilen $ depId çocuk bölümü olup olmadığını kontrol etmek hasChildNode işlevi:

public function hasChildNode($depId)
{
    $query = "select * from ".SQLPREFIX."department where id_parent=".$depId;
    $stmt=$this->db->query($query);
    $row=$this->db->fetch_assoc($stmt);
    if($row==false){
        return false;
    }else
        return true;
}

i depid.but bir 1D dizi dönmek gerektiğini düşünüyorum bakarken zaman aramalar:

$this->getEmpsByDep(0);

Böyle garip bir 2D dizi döndüğünüzde değişim "dönüş" getEmpsByDep fonksiyonunda "var_dump" için:

 array(4) {
      [0]=>
      string(2) "11"
      [1]=>
      string(2) "12"
      [2]=>
      string(2) "13"
      [3]=>
      string(2) "14"
    }
    array(3) {
      [0]=>
      string(2) "19"
      [1]=>
      string(2) "20"
      [2]=>
      string(2) "21"
    }
    array(3) {
      [0]=>
      string(2) "15"
      [1]=>
      string(2) "16"
      [2]=>
      string(2) "17"
    }
    array(8) {
      [0]=>
      string(1) "2"
      [1]=>
      string(1) "4"
      [2]=>
      string(1) "5"
      [3]=>
      string(1) "6"
      [4]=>
      string(1) "7"
      [5]=>
      string(1) "8"
      [6]=>
      string(1) "9"
      [7]=>
      string(2) "10"
    }

Burada tablo yapısı ve veri örnek:

$query[]="create table ".$sqltblpre."department(
     depId number(10) not null primary key,
     depName varchar2(50) not null,
     id_parent number(10)
)";

//department(部门和岗位)
$index=1;
$query[] = "INSERT INTO ".$sqltblpre."department values(".$index++.",'院部',0)";  //1
$query[] = "INSERT INTO ".$sqltblpre."department values(".$index++.",'政治部',0)"; //2
$query[] = "INSERT INTO ".$sqltblpre."department values(".$index++.",'医务部',0)"; //3
$query[] = "INSERT INTO ".$sqltblpre."department values(".$index++.",'护理部',0)"; //4
$query[] = "INSERT INTO ".$sqltblpre."department values(".$index++.",'经济部',0)";  //5
$query[] = "INSERT INTO ".$sqltblpre."department values(".$index++.",'信息科',0)";  //6
$query[] = "INSERT INTO ".$sqltblpre."department values(".$index++.",'医学工程科',0)";
$query[] = "INSERT INTO ".$sqltblpre."department values(".$index++.",'门诊系统',0)";
$query[] = "INSERT INTO ".$sqltblpre."department values(".$index++.",'内科系统',0)";
$query[] = "INSERT INTO ".$sqltblpre."department values(".$index++.",'外科系统',0)";

$query[] = "INSERT INTO ".$sqltblpre."department values(".$index++.",'院长',1)";
$query[] = "INSERT INTO ".$sqltblpre."department values(".$index++.",'政委',1)";
$query[] = "INSERT INTO ".$sqltblpre."department values(".$index++.",'副院长',1)";
$query[] = "INSERT INTO ".$sqltblpre."department values(".$index++.",'秘书',1)";

$query[] = "INSERT INTO ".$sqltblpre."department values(".$index++.",'主任',3)";
$query[] = "INSERT INTO ".$sqltblpre."department values(".$index++.",'副主任',3)";
$query[] = "INSERT INTO ".$sqltblpre."department values(".$index++.",'助理员',3)";
$query[] = "INSERT INTO ".$sqltblpre."department values(".$index++.",'训练队',3)"; //18

$query[] = "INSERT INTO ".$sqltblpre."department values(".$index++.",'队长',18)";
$query[] = "INSERT INTO ".$sqltblpre."department values(".$index++.",'助理员',18)";
$query[] = "INSERT INTO ".$sqltblpre."department values(".$index++.",'队员',18)";

böylece bir kelime, nasıl ben 1D dizi bu işlevin doğru kodu düşünce alabilirim?

3 Cevap

Eğer tekrar işlevini çağırarak ama çıkışını uzak basıyorlar şu anda, sizin diziler birleştirmek gerekir. Ne demek istediğimi görmek için bu örneğe bakın

<?php
function recursive($x) {
    $arr = array();
    if ($x == 10) {
        return $arr;
    } else {
        $i = $x;
        while ($i != 0) {
            $arr[] = $i;
            $i = $i - 1;
        }

        return array_merge($arr, recursive($x + 1));
    }
}

$arr = recursive(0);

var_dump($arr);

?>

Kodunuzu düzeltmek için, yerine

self::getEmpsByDep($depId);

Ile

array_merge($arr, self::getEmpsByDep($depId));

Bunu deneyebilirsiniz

public function getEmpsByDep($depId)
{ 
    $query = "select * from ".SQLPREFIX."department where id_parent=".$depId; 
    $stmt=$this->db->query($query);
    $arr = array();
    while($row=$this->db->fetch_assoc($stmt)) 
    {    
        if($this->hasChildNode($row['DEPID'])) 
        { 
           $emps = $this->getEmpsByDep($depId);  //调用非静态方法一般不用SELF::
           $arr = array_merge($arr, $emps);
        } 
        else 
        { 
           $arr[]=$row['DEPID']; 
         } 
    } 
    return ($arr); 
 } 

Recursive fonksiyonlar için bir referans olarak $ dizi geçirerek deneyin

public function getEmpsByDep($depId, &$arr = array()){
    $query = "select * from ".SQLPREFIX."department where id_parent=".$depId;
    $stmt=$this->db->query($query);     
    while(($row=$this->db->fetch_assoc($stmt))==true)
    {   
        if($this->hasChildNode($row['DEPID']))
        {
            $depId = $row['DEPID'];
            self::getEmpsByDep($depId);
        }
        else
        {
            $arr[]=$row['DEPID'];
        }
    }
    return ($arr);
}