【发布时间】:2011-04-19 06:30:54
【问题描述】:
我正在尝试让这样的东西工作:
function posts_formatter (&$posts){
foreach ($posts as $k => $v){
if (is_array($v)){
posts_formatter($v);
}else{
switch (strtolower($k)){
# make email addresses lowercase
case (strpos($k, 'email') !== FALSE):
$posts[$k] = strtolower($v);
break;
# make postcodes uppercase
case (strpos($k, 'postcode') !== FALSE):
$posts[$k] = strtoupper($v);
break;
# capitalize certain things
case (strpos($k, 'line1') !== FALSE):
case (strpos($k, 'line2') !== FALSE):
case (strpos($k, 'line3') !== FALSE):
case (strpos($k, 'forename') !== FALSE):
case (strpos($k, 'surname') !== FALSE):
$posts[$k] = capitalize($v);
break;
}
}
}
}
它将正确地遍历数组并格式化值,但我无法让它返回它们。我已经尝试从函数声明中删除 & 并在最后添加一个 return 但它不会做任何事情。
此外,我在想也许使用RecursiveArrayIterator 可能是要走的路。然而,尽管我面前有一本书,其中有一章是关于 SPL 迭代器的,但它的示例对于实现我想要实现的目标毫无用处。我将如何实施?
编辑:
array (
'user' =>
array (
'title' => 'Mr.',
'forename' => 'lowercase',
'surname' => 'name',
'businessName' => 'some dude',
'telephone' => '07545464646',
'postcode' => 'wa1 6nj',
'line1' => 'blergh road',
'line2' => 'randomLY cApitaLIzed wOrds',
'line3' => '',
),
'email' => 'CAPITALIZED@BLERGH.com',
'address' =>
array (
'postcode' => 'ab1 1ba',
'line1' => 'test road',
'line2' => 'testville',
'line3' => 'testshire',
),
'date' => '2010-09-30'
)
【问题讨论】:
-
愿意提供
var_export示例数组吗? -
嗯,数组可以是任何多维(或基本)数组,这就是重点。所有函数需要做的就是寻找那些特定的键,它们可能存在也可能不存在于数组中并格式化它们的值。问题是让它将它们输出回脚本。
-
我问是因为为了写一个例子,我想使用你的实际数据而不是想出一个虚拟数组。这只是为了让为您编写代码变得不那么乏味。
-
您的 switch/case 构造无法按照您可能想要的方式工作。你所拥有的就像
if ( strtolower($k) == (strpos($k, 'email')!==FALSE) )。 -
很公平!我认为您需要它来更好地理解问题。
标签: php recursion iterator multidimensional-array