【发布时间】:2020-01-09 13:54:08
【问题描述】:
我有一个国家/地区的关联数组,州名是键:
array:13 [
"Ontario" => null
"Manitoba" => null
"New Brunswick" => null
"Yukon" => null
"Saskatchewan" => null
"Prince Edward Island" => null
"Alberta" => null
"Quebec" => null
"Nova Scotia" => null
"British Columbia" => null
"Nunavut" => null
"Newfoundland and Labrador" => null
"Northwest Territories" => null
]
我还有一个关联数组,其中包含所有具有值的状态:
array:8 [
"Alberta" => 17
"Cairo" => 1
"Calgary" => 1
"ddd" => 4
"gfdxf" => 1
"New Cairo" => 1
"Ontario" => 1
"secret" => 30
]
现在我需要将第二个数组映射到第一个数组,这样结果就是:
array:13 [
"Ontario" => 1
"Manitoba" => 0
"New Brunswick" => 0
"Yukon" => 0
"Saskatchewan" => 0
"Prince Edward Island" => 0
"Alberta" => 17
"Quebec" => 0
"Nova Scotia" => 0
"British Columbia" => 0
"Nunavut" => 0
"Newfoundland and Labrador" => 0
"Northwest Territories" => 0
]
我创建了一个嵌套循环,它工作正常,但是代码很丑,现在有没有更有效的方法?
我的代码:
foreach ($all_states as $state_x => $value_x) {
foreach ($country_states as $state_y => &$value_y) {
if (strtolower($state_x) == strtolower($state_y)) {
$value_y = $value_x;
} elseif ($value_y == NULL) {
$value_y = 0;
}
}
}
【问题讨论】:
-
如果您有想要改进的工作代码,那么 StackExchange 代码审查可能更适合您的问题 - 请查看他们的指南。在这里,我们实际上只处理代码问题,或有关特定编程细节的问题。 “它有效,但我认为它很丑”并不是那种问题。如果您所说的“高效”是指执行时间或内存使用方面的性能,那么我们可能会有所帮助,但如果您只是想让代码“更好”,那么恕我直言,这更像是一个代码审查问题。
-
不只是更好,我有这个问题不仅仅是在一个案例中,它在项目中不止一次发生,所以我需要一种更有效的方法来应对大量输入,但是感谢建议,我不知道 StackExchange 代码审查
-
“我有这个问题”...什么问题? “大”输入有什么问题?如果您在该特定问题上需要帮助,请您具体说明一下。
-
array_merge但null的值仍将是null而不是0。 -
您可以使用
foreach循环或array_merge和array_map的组合来做到这一点 - 我在我的帖子中展示了两种方式 - 随意选择一个看起来更适合你的方式跨度>