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不需要数组的所有值都大写,只需要其中的一部分。:)所以,也许数组_映射不适合这种情况。