[英]Multidimensional array in PHP using foreach loop
这是一个数组,我需要从中整理出部门名称,全名和薪水,其薪水在10000rs以上。 数组是:
Array
(
[PHP] => Array
(
[0] => Array
(
[name] => Jay
[salary] => 8000
)
[1] => Array
(
[name] => Raj
[salary] => 15000
)
[2] => Array
(
[name] => Mihir
[salary] => 12000
)
)
[Flex] => Array
(
[0] => Array
(
[name] => Vijay
[salary] => 14000
)
)
[System] => Array
(
[0] => Array
(
[name] => Kishan
[salary] => 5000
)
)
)
我在 foreach 的循环中完全困惑,不知道如何从数组中调用每个值。
我的代码允许我只显示名称。
我可以知道在 PHP 中打印和使用多维数组的最佳方法是什么吗?
我的代码:
foreach($newArray as $x=>$x_value){
foreach ($x_value as $y=> $y_value){
if($y_value['salary']>10000)
echo $y_value['name']." has ". $y_value['salary']. ", ";
}
}
使用以下,测试和工作
$filterArray = array();
$i = 0;
foreach($salary as $dept => $employee){
foreach($employee as $index => $data){
if($data['salary'] > 10000){
$filterArray[$i]['deprtment'] = $dept;
$filterArray[$i]['name'] = $data['name'];
$filterArray[$i]['salary'] = $data['salary'];
}
$i++;
}
}
结果 :-
Array
(
[1] => Array
(
[deprtment] => PHP
[name] => Raj
[salary] => 15000
)
[2] => Array
(
[deprtment] => PHP
[name] => Mihir
[salary] => 12000
)
[3] => Array
(
[deprtment] => Flex
[name] => Vijay
[salary] => 14000
)
)
这是循环数组的更简单的解决方案。
foreach ($bigArray as $department => $employees) {
foreach ($employees as $employee) {
if ($employee["salary"] > 10000) {
echo "Department: " . $department;
echo "Employee: " . $employee;
echo "Salary: " . $salary;
} else {
echo $person . " has no money.";
}
}
}
这将输出您在示例中尝试打印的内容。
第一个员工的输出:
Department: <department name>
Employee: Raj
Salary: 15000
将来,您应该在示例数组中包含部门名称,因为您的示例没有您尝试打印的所有信息; 我们不能打印不存在的东西。
您的输入是嵌套数组。 所以你必须使用 foreach +for 循环:
$final_array = array();
foreach($newArray as $x=>$x_value)
{
foreach ($i=0;$i<count($x_value);$i++)
{
if($x_value[$i]['salary']>10000)
{
if(isset($final_array[$x]))
{
array_push($final_array[$x],array("name"=>$x_value[$i]['name'],"salary"=>$x_value[$i]['salary']));
}
else
{
$final_array[$x] = array();
array_push($final_array[$x],array("name"=>$x_value[$i]['name'],"salary"=>$x_value[$i]['salary']));
}
}
}
}
$final_array 打印最大大于 10000 输出的明智姓名和薪水:
Array
(
[PHP] => Array
(
[0]=> Array
(
[name] => Raj
[salary] => 15000
)
[1]=> Array
(
[name] => Mihir
[salary] => 12000
)
)
[Flex] => Array
(
[0]=> Array
(
[name] => Vijay
[salary] => 14000)
)
)
)
我不知道,如果我对你的理解正确,但是如果你需要从子数组(PHP、Flex、System 等)中过滤掉所有的人,然后按他们的名字或薪水对他们进行排序,你可以这样做或类似的方式:
$array = [
'PHP' => [
[
'name' => 'Jay',
'salary' => 8000
],
[
'name' => 'Raj',
'salary' => 15000
],
[
'name' => 'Mihir',
'salary' => 12000
]
],
'Flex' => [
[
'name' => 'Vijay',
'salary' => 14000
]
],
'System' => [
[
'name' => 'Kishan',
'salary' => 5000
]
]
];
$array_people = [];
$array_sorted = [];
$sort_by = 'name'; // Array key name
$sort_desc = false;
$min_salary = 10000;
foreach ($array as $type => $people)
{
foreach ($people as $info)
{
if ($info['salary'] >= $min_salary) {
$array_sorted[] = $info[$sort_by];
$array_people[] = $info;
}
}
}
if ($sort_desc) {
// Sort descending
arsort($array_sorted);
} else {
// Sort ascending
asort($array_sorted);
}
$array_final = [];
foreach (array_keys($array_sorted) as $index)
{
$array_final[] = $array_people[$index];
}
print_r($array_final);
输出:
Array
(
[0] => Array
(
[name] => Mihir
[salary] => 12000
)
[1] => Array
(
[name] => Raj
[salary] => 15000
)
[2] => Array
(
[name] => Vijay
[salary] => 14000
)
)
您需要做的第一件事是以某种方式处理主数组,该方式允许您只保留所需的项目 - 这些项目需要存储在不同的(空)数组中(在本例中$array_people
)。
在检测您需要的项目时,您必须找出您想要排序的所有值 - 这可以同时完成。 这只是关于创建一个新数组,该数组将仅包含您要排序的值(在本例中$array_sorted
)。
然后是更容易的部分。 接下来要做的是对数组进行排序。 有很多功能可以帮助您解决这个问题。
我使用的函数( asort
和arsort
)保留了项目的原始键,因此您可以通过排序数组的键对包含所有人的数组进行排序(请参阅上面的代码)。
就是这样,现在你有一个包含过滤和排序的人的数组:) ...希望,这对你有帮助。
好吧,在阅读了这么多解决方案后,我个人认为其中一些对于新手来说完全令人困惑,所以这里是我实际实现的解决方案,它非常简单且易于理解多维数组的流程。
foreach($newArray as $x=>$x_value){
foreach ($x_value as $y=> $y_value){
if($y_value['salary']>10000){
echo "<tr>";
echo "<td>"; echo $y_value['name']; echo "</td>";
echo "<td>"; echo $x; echo "</td>";
echo "<td>"; echo $y_value['salary']; echo "</td>";
echo "</tr>";
}
}
}
输出将是这样的,(如果你使用 table )
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.