php在课堂上结合了2个功能

时间:2015-07-06 18:26:11

标签: php

我试着在课堂上传递这个功能

public static function trimValue(&$value)
{
    $value = trim($value);
}
public static function trimArray($array)
{
    array_filter($array, Request::trimValue);
}

我的尝试:

library(xtable)

ui <- shinyUI(
        fluidPage(
                withMathJax(),
                titlePanel("Panel Title"),
                sidebarLayout(
                        sidebarPanel(
                                checkboxGroupInput("inputs", label = "Select Inputs:",
                                                   choices=c("Option A",
                                                             "Option B"),
                                                   selected="Option A")),
                        mainPanel((tabsetPanel(
                                tabPanel("Test Table",h2("Test Table Header"),uiOutput("tabletest"))))))))

server=function(input, output) {output$tabletest<-renderUI({ 
        table2=data.frame(A=c("{SubheaderA}","Item A1","Item A2","Item A3","{Subheader B}"," Item B1","Item B2","Item B3"),
                          B=c("","Value  A1","Value  A2","Value  A3","","Value  B1","Value  B2","Value  B3"))
        test=print(xtable(table2,type="latex",sanitize.text.function=identity))
        html=paste0("$$",test,"$$")
        list(tags$script(src = 'https://c328740.ssl.cf1.rackcdn.com/mathjax/2.0-latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML', type = 'text/javascript'),
             HTML(html)
        )  
})
}

shinyApp(ui = ui, server = server)

但没有工作,正在尝试使用call_user_func,call_user_func_array,但也没有工作,请帮助解决方案!

3 个答案:

答案 0 :(得分:0)

您应该使用return而不是reference。编辑了trimArray。

public static function trimValue($value)
{
    return trim($value);
}

public static function trimArray($array)
{
    return array_map(["Request", "trimValue"], $array);
}

public static function trimAndFilterArray($array)
{
    return array_filter(self::trimArray($array);
}

使用原样:

$trimmedValue = Request::trimValue($originalValue);
$trimmedArray = Request::trimArray($originalArray);

测试:

class Request 
{
public static function trimValue($value)
{
    return trim($value);
}

public static function trimArray($array)
{
    return array_filter(array_map(["Request", "trimValue"], $array));
}
}

$originalValue = " test ";
$originalArray = [" test ", " ", "test ", " test"];

$trimmedValue = Request::trimValue($originalValue);
$trimmedArray = Request::trimArray($originalArray);
var_dump($trimmedValue, $trimmedArray);

结果:

string(4) "test"
array(3) {
  [0]=>
  string(4) "test"
  [2]=>
  string(4) "test"
  [3]=>
  string(4) "test"
}

编辑将修剪和过滤器分隔为自己的方法。

答案 1 :(得分:0)

你有几个问题。在您当前的使用情况下,您需要使用$array通过引用传递&。此外,您的回调应该是字符串'Request::trimValue'array('Request', 'trimValue')self也可以代替Request。最后,array_filter()并不是您想要的。试试array_walk()

public static function trimValue(&$value)
{
    $value = trim($value);
}
public static function trimArray(&$array)
{
    array_walk($array, 'self::trimValue');
}

答案 2 :(得分:0)

试试这个:

public static function trimArray($array)
{
    return array_filter($array, array('Request', 'trimValue'));
}

它不起作用,因为array_filter期望callable作为第二个参数。在PHP中,您可以通过几种不同的方式指定可调用对象,以上是传递callable的一种方法。

我同意@OIS你应该将你的两个函数改为return一个值,而不是通过引用传递,但那更具风格。