Php 数组中的ucwords值

Php 数组中的ucwords值,php,arrays,Php,Arrays,在我的$u帖子中,我想知道如何将ucwords应用于数组中的值“english”和“math” Array ( [name1] => Array ( [0] => english [1] => 2 ) [name2] => Array ( [0] => mat

在我的$u帖子中,我想知道如何将ucwords应用于数组中的值“english”和“math”

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);
      }
    }
}

使用参考
&

foreach($value as $key2 => &$value2)
      {
        $value2 = ucwords($value2);
      }
试试这个

foreach($data as $key => $value)
{
  if(is_array($value))
   {
      array_map('ucwords',$value);
   }
}

您的
foreach
几乎是正确的,所以只要

foreach($_POST as $key => $value)
{
    if(is_array($value))
    {
        $_POST[$key][0] = ucwords($_POST[$key][0]);
    }
}

我相信,如果您通过引用传递数组(使用符号和运算符),您可以使用与发布的代码类似的方式来执行此操作,因此您原来的
foreach
行可以是:

foreach ($value as $key2 => &$value2) { // note use of & here

    $value2 = ucwords($value2);
}
见:

编辑:哎哟,哈伊姆写对了-你要通过引用将
$value
传递给你正在分配新值的
foreach
循环。我已经修改了上面的代码。

通过更改这些值(与任何其他变量一样)。由于它是一个数组,所以基本上是这样的(对于您的示例中的
“english”
):

您正在使用一个
foreach
循环来迭代这些值中的每一个,这基本上类似于下面的(再次简化)示例(这在您的情况下不起作用,只是为了使其更加可见):

如本例所示,您正在更改
$value2
的值,但没有更改
$\u POST
中的相应条目。您可以在PHP中使用引用或别名来实现这一点:

$value2 = &$_POST['name1'][0];
$value2 = ucwords($value2);
这也将更改
$\u POST['name1'][0]
,因为它已被用作
$value2
,现在是对它的引用

也支持引用:

foreach($_POST['name1'] as &$value2)
{
    $value2 = ucwords($value2);
}
unset($value2); # remove the alias for safety reasons.
请参见
$value2
前面的
foreach
标题内的
标志。这使得迭代数组时,
$value2
成为每个数组项的别名

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);
        }
        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);
        }
    }
}

因为它不使用任何别名/引用,所以它的可读性更好,更容易理解它的工作原理。

这已经内置到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);

如果数学、英语在第二个关键点,那怎么行呢?好吧,我们假设数组布局总是这样。:-s(我懒得和你辩论)太懒(15个字符,无论如何请修改你的答案)只有代码的答案在StackOverflow上价值很低,因为它们在教育OP和数千名未来研究人员方面做得很差。请务必解释一下你的代码是如何工作的,以及为什么这是一个好主意。“试试这个”(仅代码)答案在StackOverflow上的价值很低,因为它们在教育OP和成千上万的未来研究人员方面做得很差。请始终包括一些关于您的代码如何工作以及为什么它是一个好主意的解释。仅代码的答案在StackOverflow上价值很低,因为它们在教育OP和数千名未来研究人员方面做得很差。请总是包括一些关于你的代码如何工作以及为什么它是一个好主意的解释。请直接回答所问的问题。
foreach ($_POST as $keyOuter => $valueOuter)
{
    if (is_array($valueOuter))
    {
        foreach ($valueOuter as $keyInner => $valueInner)
        {
            $_POST[$keyOuter][$keyInner] = ucwords($valueInner);
        }
    }
}
$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);