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

发布时间:2022-04-30 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了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 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
            )
        )
    )
)

脚本宝典总结

以上是脚本宝典为你收集整理的PHP数组在循环中创建多维数组全部内容,希望文章能够帮你解决PHP数组在循环中创建多维数组所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。