我读到将新的键值对推入数组是没有意义的。但是,如何才能最好地解决这种情况呢?
我有一系列的导师和课程数据:
$data = [
['tutor_name' => 'John Doe', 'course_day' => 'Monday', ...],
['tutor_name' => 'John Doe', 'course_day' => 'Tuesday', ...]
...
];
我需要把所有的日子都翻译成我的语言(cz(,所以我写了一个开关:
function translate_to_cz ($day) {
switch ($day) {
case "Monday":
$day_cz = "Pondělí";
break;
case "Tuesday":
$day_cz = "Úterý";
break;
...
}
return $day_cz;
}
我需要一个循环,将$data['curse_day']发送到交换机。然后$day_cz将返回到原始数组,最好有一个新的关键字$data["curse_day_cz"]在等待它。这能做到吗?感谢
如何最好地解决这种情况?
好吧,您似乎想要执行值替换,所以创建一个查找并通过其键访问适当的替换。
不要用switch
块膨胀脚本,只需创建一个查找数组,然后在迭代数据行时进行替换。您可以使用迭代函数或简单的foreach()
循环。
代码:(Demo((PHP7.4以来的现代语法(
$enToCz = [
'Monday' => 'Pondělí',
'Tuesday' => 'Úterý'
];
$data = [
['tutor_name' => 'John Doe', 'course_day' => 'Monday',],
['tutor_name' => 'John Doe', 'course_day' => 'Tuesday',]
];
array_walk(
$data,
function (&$row) use ($enToCz) {
$row['course_day_cz'] = $enToCz[$row['course_day']];
}
);
/* or you can use:
foreach ($data as &$row) {
$row['course_day_cz'] = $enToCz[$row['course_day']];
}
*/
var_export($data);
输出:
array (
0 =>
array (
'tutor_name' => 'John Doe',
'course_day' => 'Monday',
'course_day_cz' => 'Pondělí',
),
1 =>
array (
'tutor_name' => 'John Doe',
'course_day' => 'Tuesday',
'course_day_cz' => 'Úterý',
),
)
语法解释:
变量前的CCD_ 3表示";通过引用修改";(如果你想做更多的研究,这是一个需要搜索的术语(。它允许变量中保存的数据直接发生突变。这是必要的;变量的副本";正在访问。
在PHP中,每次更改原始数组值时都会有一些信息丰富的讨论。
use()
是一种用于将全局变量转移到自定义函数(闭包(范围内的技术。在PHP中,什么是闭包以及为什么使用";使用";标识符?
此外,array_map()
可用于返回带有附加列的数组,而无需声明结果数组或修改原始数组。(演示(
var_export(
array_map(
fn($row) => $row + ['course_day_cz' => $enToCz[$row['course_day']]],
$data
)
);
您可以在$data
上使用foreach
循环,使用对该值的引用以便在循环中修改它,并对course_day
值调用translate函数:
foreach ($data as &$value) {
$value['course_day_cz'] = translate_to_cz($value['course_day']);
}
3v4l.org 上的演示