循环表示多维数组的一部分



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

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

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

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

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

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

使用 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

使用:

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

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

您需要在

foreach loop之外定义一个变量。

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

尝试使用 array_walk

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

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

相关内容

最新更新