在我的$ _POST中,我想知道如何在数组中的值“english”和“math”上应用ucwords。
Array
(
[name1] => Array
(
[0] => english
[1] => 2
)
[name2] => Array
(
[0] => math
[1] => 1
)
[submit] => Add to List
)
我仍然在操纵数组时感到困惑,所以我尝试了这个,但没有运气。
foreach($_POST as $key => $value)
{
if(is_array($value))
{
foreach($value as $key2 => $value2)
{
$value2 = ucwords($value2);
}
}
}
答案 0 :(得分:4)
通过更改这些值(与任何其他变量一样)。因为它是一个数组,这基本上是这样的(在你的例子中为"english"
):
$_POST['name1'][0] = ucwords($_POST['name1'][0]);
您正在使用foreach
循环来迭代每个值,这基本上类似于以下(再次简化)示例(在您的情况下不起作用,只是为了使其更加明显):
$value2 = $_POST['name1'][0];
$value2 = ucwords($value2);
如此示例所示,您正在更改$value2
的值,而不是$_POST
中的相应条目。您可以在PHP中使用引用或别名来实现此目的:
$value2 = &$_POST['name1'][0];
$value2 = ucwords($value2);
这也将更改$_POST['name1'][0]
,因为它aliased Docs为$value2
,现在是对它的引用。
foreach
Docs也支持引用:
foreach($_POST['name1'] as &$value2)
{
$value2 = ucwords($value2);
}
unset($value2); # remove the alias for safety reasons.
查看&
前面foreach
标题内的$value2
符号。这使$value2
成为每个数组条目的别名,同时迭代数组。
当你在彼此内部迭代两个数组时,你需要应用这两次,这是完整的例子:
foreach ($_POST as $key => &$value)
{
if (is_array($value))
{
foreach ($value as $key2 => &$value2)
{
$value2 = ucwords($value2);
}
unset($value2); # remove alias for safety reasons.
}
}
unset($value); # remove alias for safety reasons.
当然,可以在此处防止别名,并使用键直接访问这些值:
foreach ($_POST as $keyOuter => $valueOuter)
{
if (is_array($valueOuter))
{
foreach ($valueOuter as $keyInner => $valueInner)
{
$_POST[$keyOuter][$keyInner] = ucwords($valueInner);
}
}
}
它可能更易读,更容易理解它是如何工作的,因为它不使用任何别名/引用。
答案 1 :(得分:3)
使用参考&
foreach($value as $key2 => &$value2)
{
$value2 = ucwords($value2);
}
答案 2 :(得分:3)
如果您通过引用传递数组(使用&符号运算符),我相信您可以采用与发布代码类似的方式执行此操作,因此原始foreach
行可能是:
foreach ($value as $key2 => &$value2) { // note use of & here
$value2 = ucwords($value2);
}
请参阅:http://php.net/manual/en/language.references.pass.php
编辑:哎呀,Haim正确编写了 - 您可以通过引用传递$value
来为您分配新值的foreach
循环。我修改了上面的代码。
答案 3 :(得分:2)
您的foreach
几乎是正确的,所以只是......
foreach($_POST as $key => $value)
{
if(is_array($value))
{
$_POST[$key][0] = ucwords($_POST[$key][0]);
}
}
答案 4 :(得分:0)
$_POST[$key][$key2] = ucwords($value2);
答案 5 :(得分:0)
试试这个
foreach($data as $key => $value)
{
if(is_array($value))
{
array_map('ucwords',$value);
}
}
答案 6 :(得分:0)
这已经内置到php
中$array = array('foo', 'bar','yup');
$lower = array_map('strtolower', $array);
$upper = array_map('strtoupper', $array);
$ucwords = array_map('ucwords', $array);
$ucfirst = array_map('ucfirst', $array);