我在PHP中有这个:
$data = array("test"=>array("abc"=>"xyz"));
我想在数组值后附加“数据”,因此 $ data 数组的输出将为“数据:xyz ”
它只是一个样本。如何使用多维数组执行此操作。即;附加多维数组值的字符串?我可以在同一个数组中使用持久值,以便重新使用它吗?
答案 0 :(得分:4)
有一个PHP函数,“[递应]递归用户函数到数组的每个成员”它是array_walk_recursive()。
以下是使用闭包的PHP 5.3的示例:
array_walk_recursive($data, function(&$str) { $str = "data:$str"; });
如果您觉得有点想象,可以使它成为一个接受可配置前缀的函数,例如:
function prepend(&$v, $k, $prefix)
{
$v = $prefix . $v;
}
array_walk_recursive($data, 'prepend', 'data:');
答案 1 :(得分:2)
想象一下,您想要将自定义函数应用于您的数组,但仅限于特定键=>值对,这是我的改进版本:
$data = array( "test" => array("abc" => "xyz", 'def'=> 2), 'test2' => array ( 'abc' => 'jkl', 'def' => 5) );
$keytochange = 'def';
$apply = 'md5';
$data = f($data,$keytochange,$apply);
function f($array, $keytochange, $apply)
{
foreach ($array as $key => $value)
{
if (is_array($value))
$array[$key] = f($value,$keytochange,$apply);
else
$array[$keytochange] = $apply( $value );
}
return $array;
}
print_r($data);
输出:
Array
(
[test] => Array
(
[abc] => xyz
[def] => c81e728d9d4c2f636f067f89cc14862c
)
[test2] => Array
(
[abc] => jkl
[def] => e4da3b7fbbce2345d7772b0674a318d5
)
)
答案 2 :(得分:1)
如果您不关心人类可读性,只想serialise一个数组供以后使用:
<?php
$data = Array("test" => Array("abc" => "xyz"));
$str = serialize($data);
echo 'data:' . $str;
print_r(unserialize($str));
// data:<some characters here>
// Array("test" => Array("abc" => "xyz"));
?>
如果您正在尝试修改原始数组,以便在每个级别的数组中将文本“data:”添加到every值:
<?php
$data = Array("test" => Array("abc" => "xyz"));
function f($array) {
foreach ($array as $key => $value) {
if (is_array($value))
$array[$key] = f($value);
else
$array[$key] = "data:" . $value;
}
return $array;
}
$data = f($data);
print_r($data);
// Output: Array("test" => Array("abc" => "data:xyz"));
?>
答案 3 :(得分:1)
要修改数组中的每个项目,可以使用函数array_map()
示例:
function Prepend($s)
{
return 'Data:'.$s;
}
$old_array = array('abc','def','ghi','xyz');
$new_Array = array_map('Prepend',$old_array);
var_dump($old_array);
var_dump($new_Array);
输出:
array
0 => string 'abc' (length=3)
1 => string 'def' (length=3)
2 => string 'ghi' (length=3)
3 => string 'xyz' (length=3)
array
0 => string 'Data:abc' (length=8)
1 => string 'Data:def' (length=8)
2 => string 'Data:ghi' (length=8)
3 => string 'Data:xyz' (length=8)