我试着在课堂上传递这个功能
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,但也没有工作,请帮助解决方案!
答案 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
一个值,而不是通过引用传递,但那更具风格。