字符串的键和索引 - 扭曲内爆

时间:2013-06-28 10:08:44

标签: php arrays optimization implode

段:

$temp = array();
foreach ($data as $key => $value) {
    // This line varies, from HTML to URLs, to anything in between
    array_push($temp, "<b>$key:</b> $value"); 
}
$request = implode('<br/>', $temp); // Glue also varies depending on needs
unset($temp);

这是通常$string .= 'blah<br/>'的假期。别介意rtrim

有人能告诉我一个更好的方法来实现上述而不使用临时数组并且可能没有循环吗?在函数中不使用上述代码的加分点,但lambda可以接受。

P.S。在写这个问题时,我发现了一个很棒的http_build_query()。一个下来,一个去。

编辑:

结果应该是什么样的:

<b>Title: </b> Value</br>
<b>Title2: </b> Value2</br>
<b>Title3: </b> Value3

或者使用不同的设置(不是必需的,但显示可能性):

key=value&key2=value2&key3=value3

我正在尝试改进我的代码,我在上面使用上面的代码段。

3 个答案:

答案 0 :(得分:1)

我的回答:有一些方法,但是:

循环&amp;数组是任何程序员最好的朋友。

它们提供了非常好的可读性,可重用性,并且通常被认为是执行几乎相同操作的正确方法。

您还可以查看array_maparray_walk。更少的代码,但它仍然是一个循环。

array_walk($data, function($value, $key){
  $temp[] = "<b>{$key}:</b> {$value}" ;  //Shorthand for array_push is $arr[] = $value ;
}) ;

答案 1 :(得分:1)

我想这是一种方式; yay for“one-liners”:

$data = ...;

echo join("\n", array_map(function($key) use ($data) {
    return sprintf('<b>%s:</b> %s',
        htmlspecialchars($key, ENT_QUOTES, 'UTF-8'),
        htmlspecialchars($data[$key], ENT_QUOTES, 'UTF-8')
    );
}, array_keys($data)));

您基本上使用绑定原始数组的闭包映射键,以便您可以访问每次调用中的键和值。

答案 2 :(得分:1)

我认为你会优先考虑你的解决方案:

$data = range('a', 'e'); // some data
$request = ''; // empty string
array_map(function($value, $key)use(&$request, $data){
    static $i = 1;
    if($i == count($data)){
        $request .= "<b>$key:</b> $value";
    }else{
        $request .= "<b>$key:</b> $value<br/>";
    }
    $i++;
}, $data, array_keys($data));

echo $request;

Online demo


带循环但没有$ temp数组的解决方案:

$data = range('a', 'e'); // some data
$request = ""; // empty string
foreach ($data as $key => $value) {
    $request .= "<b>$key:</b> $value<br/>"; // add to string
}
$request = substr($request,0,-5); // remove last <br/>
echo $request; //output