【问题标题】:Modify value in multidim array and push it as new key value pair修改多维数组中的值并将其作为新的键值对推送
【发布时间】:2020-12-26 04:13:19
【问题描述】:

我了解到将新的键值对推送到数组中是没有意义的。但是如何最好地解决这种情况呢?

我有一个多维度的导师和课程数据数组:

$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['course_day'] 发送到交换机的循环。然后 $day_cz 将返回到原始数组,最好有一个新的键 $data['course_day_cz'] 等待它。 这可以做到吗? 谢谢

【问题讨论】:

  • 您应该始终使用编码语言标记您的问题,这将确保它被尽可能多的受众看到。

标签: php arrays loops switch-statement


【解决方案1】:

如何最好地解决这种情况?

好吧,您似乎想要执行值替换,因此创建一个查找并通过其键访问适当的替换。

不要用switch 块来膨胀你的脚本,只需创建一个查找数组,然后在迭代数据行时替换。您可以使用迭代函数或简单的foreach() 循环。

代码:(Demo)

$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ý',
  ),
)

语法解释:

  1. & 在变量之前表示“通过引用修改”(如果您想进行更多研究,这是要搜索的术语)。它允许直接改变变量中保存的数据。当访问“变量的副本”时,这是必要的。

    PHP foreach change original array values 有一些内容丰富的聊天。

  2. use() 是一种用于将全局变量转移到自定义函数(闭包)范围内的技术。

    In PHP, what is a closure and why does it use the "use" identifier?

【讨论】:

  • 感谢工作!从未见过 & 和 use 关键字。这个概念/语法叫什么?这样我就可以更多地研究它。我找到了按位运算符这个词,但在我看来那是另外一回事......
  • 补充说明
【解决方案2】:

您可以在$data 上使用foreach 循环,使用对该值的引用,以便您可以在循环中修改它并在course_day 值上调用翻译函数:

foreach ($data as &$value) {
    $value['course_day_cz'] = translate_to_cz($value['course_day']);
}

Demo on 3v4l.org

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多