加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

PHP数组在循环中创建多维数组

发布时间:2020-12-13 16:09:01 所属栏目:PHP教程 来源:网络整理
导读:我有一个关联的多维数组,如下所示 $data = array();$data = Array ( [0] = Array ( [class] = 1styear [branch] = IT [Exam] = SEM1 [student name] = Alex [Bio] = Good Boy ) [1] = Array ( [class] = 2ndyear [branch] = Finance [Exam] = SEM1 [student
我有一个关联的多维数组,如下所示

$data = array();
$data = Array ( 
    [0] => Array ( [class] => 1styear [branch] => IT [Exam] => SEM1 [student name] => Alex [Bio] => Good Boy )
    [1] => Array ( [class] => 2ndyear [branch] => Finance [Exam] => SEM1 [student name] => Mark [Bio] => Intelligent )
    [2] => Array ( [class] => 2ndyear [branch] => IT [Exam] => SEM1 [student name] => Shaun [Bio] => Football Player ) 
    [3] => Array ( [class] => 1styear [branch] => Finance [Exam] => SEM2 [student name] => Mike [Bio] => Sport Player ) 
    [4] => Array ( [class] => 1styear [branch] => IT [Exam] => SEM2 [student name] => Martin [Bio] => Smart  )
    [5] => Array ( [class] => 1styear [branch] => IT [Exam] => SEM1 [student name] => Philip [Bio] => Programmer  )
    )

我需要根据上面数组中的类似元素创建新数组.意味着我必须创建阵列组.例如,类元素具有重复的第1年和第2年的值.所以它会产生一系列独特的元素.然后再次类是父数组和内部类数组应该有基于分支的数组和内部的检查数组和里面的数组应该有学生名和生物的关联数组.

所以基本上数组应该是这样的

array(
    "1styear" => array(
        "IT" => array(
            "SEM1" => array(
                array(
                    "student name" => "Alex","Bio" => "Good Boy"
                ),array(
                    "student name" => "Philip","Bio" => "Programmer"
                )
            ),"SEM2" => array(
                array(
                    "student name" => "Martin","Bio" => "Smart"
                )
            )
        )
    ),"2ndyear" => array(
        "Finance" => array(
            "SEM1" => array(
                array(
                    "student name" => "Mark","Bio" => "Intelligent"
                )
            ),"SEM2" => array(
                array(
                    "student name" => "Mike","Bio" => "Sport Player"
                )
            )
        )
    )
);

为了使基于类的组我喜欢下面哪个工作正常,但如何在其中创建数组

$classgroup = array();  
    foreach($data as $inarray){

         $classgroup[$inarray['class']][] = $inarray;
    }
    $classarray = array();
    foreach($classgroup as $key => $value){
            echo $key; // output is 1styear and secondyear 
            create array like above
    }

– – – – – – – – – – – – – – – – -编辑 – – – – – – – – ——————

从下面的循环

foreach($data as $array){
        $grouped[$array["class"]][$array["branch"]][$array["Exam"]][]=array("student name"=>$array["student name"],"Bio"=>$array["Bio"]);
}

我得到了预期的o / p
但如果我需要另一个这样的o / p

预计o / p

array(
    '1styear' =>
        array (
            0 =>
                array(
                    'Exam' => 'SEM1','branch' =>
                        array (
                            0 => 'IT'
                        ),),1 =>
                array(
                    'Exam' => 'SEM2','2ndyear' =>
        array (
            0 =>
                array(
                    'Exam' => 'SEM1','branch' =>
                        array (
                            0 => 'Finance','branch' =>
                        array (
                            0 => 'Finance'
                        ),)
        ),)

我尝试了循环但没有按预期获得o / p

foreach($data as $array){
        $grouped[$array["class"]][]=array("Exam"=>$array["Exam"],"branch"=>$array["branch"]);
}

解决方法

循环中的单行!

foreach($data as $array){
        $grouped[$array["class"]][$array["branch"]][$array["Exam"]][]=array("student name"=>$array["student name"],"Bio"=>$array["Bio"]);
}

$groups产生:

Array(
    [1styear] => Array(
        [IT] => Array(
            [SEM1] => array(
                [0] => array(
                    [student name] => Alex,[Bio] => Good Boy
                ),[1] => array(
                    [student name] => Philip,[Bio] => Programmer
                )
            ),[SEM2] => array(
                [0] => array(
                    [student name] => Martin,[Bio] => Smart
                )
            )
        ),[Finance] => array(
            [SEM2] => array(
                [0] => array(
                    [student name] => Mike,[Bio] => Sport Player
                )
            )
        )
    ),[2ndyear] => array(
        [Finance] => array(
            [SEM1] => array(
                [0] => array(
                    [student name] => Mark,[Bio] => Intelligent
                )
            )
        ),[IT] => array(
            [SEM1] => array(
                [0] => array(
                    [student name] => Shaun,[Bio] => Football Player
                )
            )
        )
    )
)

你的后续案例,更有趣/更具挑战性.我不得不把我不经常玩的一些功能搞得粉碎.看一下这个:

<?php
$data = array ( 
    array ( "class"=>"1styear","branch"=>"IT","Exam"=>"SEM1","student name"=>"Alex","Bio"=>"Good Boy"),array ( "class"=>"2ndyear","branch"=>"Finance","student name"=>"Mark","Bio"=>"Intelligent" ),"student name"=>"Shaun","Bio"=>"Football Player" ),array ( "class"=>"1styear","Exam"=>"SEM2","student name"=>"Mike","Bio"=>"Sport Player" ),"student name"=>"Martin","Bio"=>"Smart"),"student name"=>"Philip","Bio"=>"Programmer"  )
);
$class_keys=array_unique(array_column($data,"class"));  // create array of unique class values
$Exam_keys=array_unique(array_column($data,"Exam"));  // create array of unique Exam values
foreach($class_keys as $class_key){
    $i=0;  // "class" subarray index
    foreach($Exam_keys as $Exam_key){
        $q=array("class"=>$class_key,"Exam"=>$Exam_key);  // this array can have 1 or more pairs
        // create an array only of rows where $q's key-value pairs exist
        $qualifying_array=array_filter(
            $data,function($val)use($q){  
                if(count(array_intersect_assoc($val,$q))==count($q)){  // total pairs found = total pairs sought
                    return $val;
                }
            },ARRAY_FILTER_USE_BOTH
        );
        foreach($qualifying_array as $qa){  // push appropriate values into array
            $grouped2[$class_key][$i]["Exam"]=$qa["Exam"];
            $grouped2[$class_key][$i]["branch"][]=$qa["branch"];
        }
        if(isset($grouped2[$class_key][$i]["branch"])){  // ensure no duplicate values in "branch" subarray
            $grouped2[$class_key][$i]["branch"]=array_unique($grouped2[$class_key][$i]["branch"]);
        }
        ++$i;  // increment the index for each "class" subarray
    }
}
echo "<pre>";
print_r($grouped2);
echo "</pre>";

输出与您请求的输出不同,但我认为您只是展示它应该是什么样子.如果这不太对,请告诉我.

array(
    [1styear]=>array(
        [0]=>array(
            [Exam]=>SEM1
            [branch]=>array(
                [0]=>IT
            )
        ),[1]=>array(
            [Exam]=>SEM2
            [branch]=>array(
                [0]=>Finance,[1]=>IT
            )
        )
    ),[2ndyear]=>array(
        [0]=>array(
            [Exam]=>SEM1
            [branch]=>array(
                [0]=>Finance,[1]=>IT
            )
        )
    )
)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读