ucwords数组中的值

时间:2011-12-07 11:53:26

标签: php arrays

在我的$ _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);
      }
    }
}

7 个答案:

答案 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,现在是对它的引用。

foreachDocs也支持引用:

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