【问题标题】:loop for part of a multidimensional array循环多维数组的一部分
【发布时间】:2013-11-01 21:22:02
【问题描述】:

我在 PHP 中完成了一个多步骤表单,将数据存储在一个多维数组中(我在 $_SESSION 数组中创建了一个数组并将其命名为 $_SESSION['inserimento'])

那我有$_SESSION['inserimento']['name'],$_SESSION['inserimento']['city']...

我想在将它们添加到mysql之前将strtolower()函数应用于所有值

我试过这段代码,但它不起作用

foreach ($_SESSION['inserimento'] as $k=>$v){
    $v=strtolower($v);
}

我想我误解了如何在多维数组上创建循环。

【问题讨论】:

  • 尝试 var_dump($_SESSION['inserimento']);在 foreach 之前

标签: php arrays session multidimensional-array


【解决方案1】:

使用array_map() 将函数应用于数组中的所有元素:

$_SESSION['inserimento'] = array_map('strtolower', $_SESSION['inserimento']);

或者是常规的foreach循环(循环内$v是一个副本,所以需要影响到原来的数组):

foreach ($_SESSION['inserimento'] as $k => $v) {
  $_SESSION['inserimento'][$k] = strtolower($v);
}

或带有引用的foreach循环($v不再是副本,它是对原始元素的引用):

foreach ($_SESSION['inserimento'] as &$v) {
  $v = strtolower($v);
}
unset($v); // remember to unset, or $v will still be a reference to the last element after the loop

【讨论】:

    【解决方案2】:

    用途:

    foreach ($_SESSION['inserimento'] as $k => $v) {
        $_SESSION['inserimento'][$k] = strtolower($v);
    }
    

    这是因为$v 是迭代中值的副本,而不是对包含该值的变量的引用。

    【讨论】:

      【解决方案3】:

      您需要在foreach loop 之外定义一个变量。

      $lowerValue = '';
      foreach ($_SESSION['inserimento'] as $k => $v) {
          $lowerValue = strtolower($v);
      }
      

      【讨论】:

        【解决方案4】:

        尝试使用array_walk

        array_walk($_SESSION['inserimento'], function(&$value, $key) {
            $value = strtolower($value);
        });
        

        $value前面的&表示该变量是通过引用传递的。

        【讨论】:

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