Php 如果另一个对象数组元素id具有相同的id,如何将新元素添加(更新)到对象数组中?
我在PHP中有以下数组:Php 如果另一个对象数组元素id具有相同的id,如何将新元素添加(更新)到对象数组中?,php,arrays,array-merge,Php,Arrays,Array Merge,我在PHP中有以下数组: Array1 ( [0] => stdClass Object ( [expense_id] => 475 [expense_name] => DRAY [expense_unit_cost] => 270.00 ) [1] => stdClass Object ( [expense_id] => 476 [expense_na
Array1
(
[0] => stdClass Object
(
[expense_id] => 475
[expense_name] => DRAY
[expense_unit_cost] => 270.00
)
[1] => stdClass Object
(
[expense_id] => 476
[expense_name] => FUEL
[expense_unit_cost] => 32.40
)
)
及
我需要使用expense\u id将两个数组组合起来,结果如下所示:
Array3
(
[0] => stdClass Object
(
[expense_id] => 475
[expense_name] => DRAY
[expense_unit_cost] => 270.00
[expense_taxes] => Array
(
[0] => stdClass Object
(
[waybill_id] => 20005044
[expense_id] => 475
[tax_select] => tax1
[tax_id] => 1
[tax_name] => GST 5%
[tax_no] =>
[tax_value] => 13.5000
)
[1] => stdClass Object
(
[waybill_id] => 20005044
[expense_id] => 475
[tax_select] => tax2
[tax_id] => 2
[tax_name] => QST 9.975%
[tax_no] =>
[tax_value] => 26.9325
)
)
)
[1] => stdClass Object
(
[expense_id] => 476
[expense_name] => FUEL
[expense_unit_cost] => 32.40
[expense_taxes] => Array
(
[0] => stdClass Object
(
[waybill_id] => 20005044
[expense_id] => 476
[tax_select] => tax1
[tax_id] => 1
[tax_name] => GST 5%
[tax_no] =>
[tax_value] => 1.6200
)
[1] => stdClass Object
(
[waybill_id] => 20005044
[expense_id] => 476
[tax_select] => tax2
[tax_id] => 2
[tax_name] => QST 9.975%
[tax_no] =>
[tax_value] => 3.2319
)
)
)
)
如您所见,我在两个阵列上都有费用id,该必须是最终阵列的关键
我曾尝试循环一个数组并检查费用id密钥匹配,但无法实现最终数组。
另外,我还看了数组合并、数组映射和数组相交
谢谢你的建议。试试
foreach($key=>$element的对象){
如果($element->expense\u id==475){
$element->expense\u taxes[0]=$stdClass;
}
}
这一切有点复杂,因为实际的对象数组是从ajax到PHP的,但是,我根据KennyDope的建议找到了答案
如果Array1是$expenses\u obj,Array2是$invoice\u taxes\u obj
foreach ($expenses_obj as $key => $expense):
foreach ($invoice_taxes_obj as $key => $tax):
if ($expense->expense_id == $invoice_taxes_obj[$key]->expense_id){
$expense->taxes[] = (array)$invoice_taxes_obj[$key];
}
endforeach;
endforeach;
最终结果就是我需要的:
Array
(
[0] => stdClass Object
(
[expense_id] => 475
[expense_name] => DRAY
[expense_unit_cost] => 270.00
[taxes] => Array
(
[0] => Array
(
[waybill_id] => 20005044
[expense_id] => 475
[tax_select] => tax1
[tax_id] => 1
[tax_name] => GST 5%
[tax_no] =>
[tax_value] => 13.5000
)
[1] => Array
(
[waybill_id] => 20005044
[expense_id] => 475
[tax_select] => tax2
[tax_id] => 2
[tax_name] => QST 9.975%
[tax_no] =>
[tax_value] => 26.9325
)
)
)
[1] => stdClass Object
(
[expense_id] => 476
[expense_name] => FUEL
[expense_unit_cost] => 32.40
[taxes] => Array
(
[0] => Array
(
[waybill_id] => 20005044
[expense_id] => 476
[tax_select] => tax1
[tax_id] => 1
[tax_name] => GST 5%
[tax_no] =>
[tax_value] => 1.6200
)
[1] => Array
(
[waybill_id] => 20005044
[expense_id] => 476
[tax_select] => tax2
[tax_id] => 2
[tax_name] => QST 9.975%
[tax_no] =>
[tax_value] => 3.2319
)
)
)
)
欢迎您的评论。谢谢你的输入。我认为循环可以解决这个问题,你能在这里发布你的代码吗,可能有错误。在这里发布代码要复杂得多。谢谢,谢谢。我以前尝试过,但由于对象数组的原因没有成功。
Array
(
[0] => stdClass Object
(
[expense_id] => 475
[expense_name] => DRAY
[expense_unit_cost] => 270.00
[taxes] => Array
(
[0] => Array
(
[waybill_id] => 20005044
[expense_id] => 475
[tax_select] => tax1
[tax_id] => 1
[tax_name] => GST 5%
[tax_no] =>
[tax_value] => 13.5000
)
[1] => Array
(
[waybill_id] => 20005044
[expense_id] => 475
[tax_select] => tax2
[tax_id] => 2
[tax_name] => QST 9.975%
[tax_no] =>
[tax_value] => 26.9325
)
)
)
[1] => stdClass Object
(
[expense_id] => 476
[expense_name] => FUEL
[expense_unit_cost] => 32.40
[taxes] => Array
(
[0] => Array
(
[waybill_id] => 20005044
[expense_id] => 476
[tax_select] => tax1
[tax_id] => 1
[tax_name] => GST 5%
[tax_no] =>
[tax_value] => 1.6200
)
[1] => Array
(
[waybill_id] => 20005044
[expense_id] => 476
[tax_select] => tax2
[tax_id] => 2
[tax_name] => QST 9.975%
[tax_no] =>
[tax_value] => 3.2319
)
)
)
)