我需要为JavaScript使用在对象内构建一个数组内的数组。我的数据是用PHP编写的,我可以使用数组中的foreach循环来组织我的必要信息:
$officeWiseEmployees = array();
foreach($employeeList as $employee) :
$officeWiseEmployees[$employee->office_name][$employee->employee_id] = $employee->employee_name;
endforeach;
我的目的是制作数组,然后我会在必要时使用(object)
进行类型转换,以便在其中创建对象。顺便说一下,结果数据是:
array:2 [
"Office 1" => array:2 [
1 => "User 1"
2 => "User 2"
]
"Office 2" => array:2 [
3 => "User 3"
4 => "User 4"
]
]
所需的对象数组......:
[{
text: 'Office Name 1',
children:
[ { value: 1, text: 'Employee 1' }, { value: 2, text: 'Employee 2' } ]
},
{
text: 'Office Name 2',
children:
[ { value: 3, text: 'Employee 3' }, { value: 4, text: 'Employee 4' } ]
}]
问题是,每当我想继续分配数组索引时,我都在foreach循环中失败。
$make_up_array = array();
foreach( $officeWiseEmployees as $office_name => $office_employees ) {
$make_up_array['text'] = $office_name;
foreach( $office_employees as $employee_id => $employee_name ) {
// dump($employee_id);
// dump($employee_name);
}
}
你可以看到,在第3行我做错了,所以我只得到text
索引下的最后一个Office名称。如果我在text
或children
上引入另一个索引,那么我将进一步超越我需要的设置。
如何以简单的方式将我的PHP数组转换为对象内的数组内的JavaScript数组?我认为这比我想象的要容易,这就是为什么developer used this。
答案 0 :(得分:1)
正如其他人所提到的,json_encode
将确定某些东西是数组还是对象。
很多复杂性来自于您将用户ID设置为每个元素的键的方式。
<?php
$employees = [
['id' => 1, 'name' => 'Employee 1', 'office' => 'Office 1'],
['id' => 2, 'name' => 'Employee 2', 'office' => 'Office 1'],
['id' => 3, 'name' => 'Employee 3', 'office' => 'Office 2'],
['id' => 4, 'name' => 'Employee 4', 'office' => 'Office 1'],
['id' => 5, 'name' => 'Employee 5', 'office' => 'Office 2'],
];
$offices = [];
foreach ($employees as $employee) {
$offices[$employee['office']][] = [$employee['id'] => $employee['name']];
}
$officesOutput = [];
foreach ($offices as $name => $officeEmployees) {
$employees = [];
foreach ($officeEmployees as $employeeName) {
$employees[] = [
'value' => key($employeeName),
'text' => current($employeeName)
];
}
$officesOutput[] = [
'text' => $name,
'children' => $employees
];
}
echo json_encode($offices, JSON_PRETTY_PRINT);
echo PHP_EOL;
echo json_encode($officesOutput, JSON_PRETTY_PRINT);
结果:
{
"Office 1": [
{
"1": "Employee 1"
},
{
"2": "Employee 2"
},
{
"4": "Employee 4"
}
],
"Office 2": [
{
"3": "Employee 3"
},
{
"5": "Employee 5"
}
]
}
[
{
"text": "Office 1",
"children": [
{
"value": 1,
"text": "Employee 1"
},
{
"value": 2,
"text": "Employee 2"
},
{
"value": 4,
"text": "Employee 4"
}
]
},
{
"text": "Office 2",
"children": [
{
"value": 3,
"text": "Employee 3"
},
{
"value": 5,
"text": "Employee 5"
}
]
}
]
答案 1 :(得分:0)
你不必做所有这些复杂的事情。只需使用您的原始数据(在第一次foreach之后),然后
$sendtoclient = json_encode($mydeeparray) ;
然后在JS
myobj = JSON.parse(<? echo $mydeeparray? ;>
然后你可以用对象做任何你想做的事。
如果您正在努力将数据构建为正确的形式,那么只要客户端不是至关重要的。它很受欢迎,比如排序,订购客户端。
并且,对于您的问题:您必须至少在数组中创建一个对象,否则您只需覆盖$ array [&#39; text&#39;]。我不熟悉面向对象的PHP,但你必须做这样的事情(伪代码)
§arr = array();
foreach($officewiseemployees as $office_name => $employees){
$obj = Object();
$obj->name =$office_name;
$obj->employees = Array();
foreach($employees as $employeeId => $employeename)
$employeeObject = new Object();
//Assign your elements to the Object
$obj->employees.append($employeeObject);
}
}
这只是伪代码,但看起来应该是这样的。
答案 2 :(得分:0)
尝试将对象创建为对象,然后将它们添加到正确位置的数组中。那么PHP的<input type="file" multiple class="form-control">
<label for="file-upload" class="custom-file-upload"></label>
函数应该可以达到预期的效果。
这一行:
json_encode()
如果想要在循环中每次添加一个新的$ office_name,那么请尝试这样:
$make_up_array['text'] = $office_name;
一般情况下,首先尝试创建顶级元素并检查JSON输出是否正确,然后一次添加一个额外的元素 - 您可能非常接近您需要的内容!