Php 遍历多个数组并执行函数

Php 遍历多个数组并执行函数,php,arrays,Php,Arrays,我有一个具有以下结构的数组: Array ( [0] => Array ( [animal] => dog [color] => black ) [1] => Array ( [animal] => cat [color] => white ) [2] => Array

我有一个具有以下结构的数组:

Array
(
    [0] => Array
        (
            [animal] => dog
            [color] => black
        )

    [1] => Array
        (
            [animal] => cat
            [color] => white
        )

    [2] => Array
        (
            [animal] => mouse
            [color] => grey
            [attributes] => Array
                (
                    [nickname] => snuggles
                    [nickname] => buddy
                )

        )

)

我现在需要对属性数组中的每个值执行一个函数。因此,例如,大写
依偎
伙伴

这是我的方法:

$array = array(
    array("animal"=>"dog","color"=>"black"),
     array("animal"=>"cat","color"=>"white"),
     array("animal"=>"mouse","color"=>"grey", "attributes" => array("nicknames" => "snuggles", "nicknames" => "buddy"))
);

foreach ( $array as $key => $value ) {
    foreach ( $value as $key1 => $value1 ) {
        if ($key1 == 'attributes') {
            foreach ( $value as $key2 => $value2 ) {
                $value2 =  strtoupper($value2);
                $array [$key] [$key1] [$key2]= $key2;
            }
        }
    }
}
但我得到了这个错误:

strtoupper()要求参数1为字符串,数组以


您在内部循环中使用了错误的变量:

foreach ( $value as $key2 => $value2 ) {
          ^^^^^^ here
    ...
}
根据代码判断,您可能希望在此处使用
$value1

foreach ( $value1 as $key2 => $value2 ) {
          ^^^^^^^ here
    ...
}

假设
下拉列表
=>
属性
..

您在内部循环中使用了错误的变量:

foreach ( $value as $key2 => $value2 ) {
          ^^^^^^ here
    ...
}
根据代码判断,您可能希望在此处使用
$value1

foreach ( $value1 as $key2 => $value2 ) {
          ^^^^^^^ here
    ...
}
假设
下拉列表
=>
属性
..

可以使用

您可以这样做:

function toUpper($val) {
    if(is_array($val)) {
        return array_map('toUpper', $val);
    }
    return strtoupper($val);
}

$final_arr = array_map('toUpper', $array);
print_r($final_arr);
让输入为(与您的相同):

然后,您可以通过更简单、最短的方式通过数组进行操作,如下所示:

function toUpper($val) {
    if(is_array($val)) {
        return array_map('toUpper', $val);
    }
    return strtoupper($val);
}

$final_arr = array_map('toUpper', $array);
print_r($final_arr);
这将根据您的输入提供输出:

array:3 [
  0 => array:2 [
    "animal" => "DOG"
    "color" => "BLACK"
  ]
  1 => array:2 [
    "animal" => "CAT"
    "color" => "WHITE"
  ]
  2 => array:3 [
    "animal" => "MOUSE"
    "color" => "GREY"
    "attributes" => array:1 [
      "nicknames" => "BUDDY"
    ]
  ]
]
您提供的输入有一个名为
attributes
的数组键,其中包含一个数组,该数组有两个相同的键值对
昵称
。在这种情况下,这将采取最后一个

希望这有帮助

您可以使用

您可以这样做:

function toUpper($val) {
    if(is_array($val)) {
        return array_map('toUpper', $val);
    }
    return strtoupper($val);
}

$final_arr = array_map('toUpper', $array);
print_r($final_arr);
让输入为(与您的相同):

然后,您可以通过更简单、最短的方式通过数组进行操作,如下所示:

function toUpper($val) {
    if(is_array($val)) {
        return array_map('toUpper', $val);
    }
    return strtoupper($val);
}

$final_arr = array_map('toUpper', $array);
print_r($final_arr);
这将根据您的输入提供输出:

array:3 [
  0 => array:2 [
    "animal" => "DOG"
    "color" => "BLACK"
  ]
  1 => array:2 [
    "animal" => "CAT"
    "color" => "WHITE"
  ]
  2 => array:3 [
    "animal" => "MOUSE"
    "color" => "GREY"
    "attributes" => array:1 [
      "nicknames" => "BUDDY"
    ]
  ]
]
您提供的输入有一个名为
attributes
的数组键,其中包含一个数组,该数组有两个相同的键值对
昵称
。在这种情况下,这将采取最后一个


希望这有帮助

//代码:将每个值大写。您可以使用以下命令:

$array = array(
    array("animal"=>"dog","color"=>"black"),
     array("animal"=>"cat","color"=>"white"),
     array("animal"=>"mouse","color"=>"grey", "attributes" => array("nickname1" => "snuggles", "nickname2" => "buddy"))
);

foreach ( $array as $index => $value ) 
{
    foreach ( $value as $key1 => $value1 )
    {
        if(is_array($value1))
        {
            foreach ( $value1 as $key2 => $value2 )
            {
                if(is_array($value2))
                {
                    foreach ( $value2 as $key3 => $value3 )
                    {
                        $array[$index][$key1][$key2][$key3] = strtoupper($value3);
                    }
                }
                else
                {
                    $array[$index][$key1][$key2] = strtoupper($value2);
                }
            }
        }
        else
        {
            $array[$index][$key1] = strtoupper($value1);
        }
    }
}
输出:

   Array
(
    [0] => Array
        (
            [animal] => DOG
            [color] => BLACK
        )

    [1] => Array
        (
            [animal] => CAT
            [color] => WHITE
        )

    [2] => Array
        (
            [animal] => MOUSE
            [color] => GREY
            [attributes] => Array
                (
                    [nickname1] => SNUGGLES
                    [nickname2] => BUDDY
                )

        )

)

//代码:将每个值大写。您可以使用以下命令:

$array = array(
    array("animal"=>"dog","color"=>"black"),
     array("animal"=>"cat","color"=>"white"),
     array("animal"=>"mouse","color"=>"grey", "attributes" => array("nickname1" => "snuggles", "nickname2" => "buddy"))
);

foreach ( $array as $index => $value ) 
{
    foreach ( $value as $key1 => $value1 )
    {
        if(is_array($value1))
        {
            foreach ( $value1 as $key2 => $value2 )
            {
                if(is_array($value2))
                {
                    foreach ( $value2 as $key3 => $value3 )
                    {
                        $array[$index][$key1][$key2][$key3] = strtoupper($value3);
                    }
                }
                else
                {
                    $array[$index][$key1][$key2] = strtoupper($value2);
                }
            }
        }
        else
        {
            $array[$index][$key1] = strtoupper($value1);
        }
    }
}
输出:

   Array
(
    [0] => Array
        (
            [animal] => DOG
            [color] => BLACK
        )

    [1] => Array
        (
            [animal] => CAT
            [color] => WHITE
        )

    [2] => Array
        (
            [animal] => MOUSE
            [color] => GREY
            [attributes] => Array
                (
                    [nickname1] => SNUGGLES
                    [nickname2] => BUDDY
                )

        )

)

做这件事的简单方法是

foreach ( $array as $key => $value ) {
    /* check whether the index is available or not */
    if( isset( $value['attributes'] ) ) {
         foreach ( $value['attributes'] as $namekey => $names ) {
             /* here capitalise the value and save in same index */
             $array[$key]['attributes'][$namekey] = strtoupper($names);
         }
    }
}
print_r($array);
输出:

Array ( [0] => Array ( [animal] => dog [color] => black )
        [1] => Array ( [animal] => cat [color] => white )
        [2] => Array ( [animal] => mouse [color] => grey [attributes] => Array ( [nicknames] => BUDDY ) ) )

做这件事的简单方法是

foreach ( $array as $key => $value ) {
    /* check whether the index is available or not */
    if( isset( $value['attributes'] ) ) {
         foreach ( $value['attributes'] as $namekey => $names ) {
             /* here capitalise the value and save in same index */
             $array[$key]['attributes'][$namekey] = strtoupper($names);
         }
    }
}
print_r($array);
输出:

Array ( [0] => Array ( [animal] => dog [color] => black )
        [1] => Array ( [animal] => cat [color] => white )
        [2] => Array ( [animal] => mouse [color] => grey [attributes] => Array ( [nicknames] => BUDDY ) ) )

您不能使用问题中发布的相同数据进行测试。由于您发布的数组中没有任何名为
dropdown
的键,因此此
$key1=='dropdown'
将永远不会计算为true,
strotupper()
将永远不会执行。@MagnusEriksson:我的错,只是一个复制粘贴错误。您不能使用您在问题中发布的相同数据进行测试。由于您发布的数组中没有任何名为
dropdown
的键,因此此
$key1=='dropdown'
将永远不会计算为true,并且将永远不会执行
strotupper()
。@Magnueriksson:不好,只是复制粘贴错误。这很好,但需要修改。只需修改“attributes”子数组…@sinisake-Yup,只需修改
属性
。请投票D“我现在需要对属性数组中的每个值执行一个函数。例如,将SNUGGLES和BUDDY大写。”-因此,不是每个元素,只是数组的一部分。:)我没听懂你的意思,你能为你的问题贴一个新问题吗?因为这里不应该问问题!我并没有提出这个问题,只是试图解释问题的症结所在:OP不需要数组的所有值都大写,只需要其中的一部分。:)所以,也许数组_映射不适用于此。这很好,但需要修改。只需修改“attributes”子数组…@sinisake-Yup,只需修改
属性
。请投票D“我现在需要对属性数组中的每个值执行一个函数。例如,将SNUGGLES和BUDDY大写。”-因此,不是每个元素,只是数组的一部分。:)我没听懂你的意思,你能为你的问题贴一个新问题吗?因为这里不应该问问题!我并没有提出这个问题,只是试图解释问题的症结所在:OP不需要数组的所有值都大写,只需要其中的一部分。:)所以,也许数组_映射不适合这种情况。