if ( $_GET['tab'] == 'newest' ) {
// Go through each question
foreach( array_reverse( $end_array, true ) as $tags_and_Qid['question_id'] => $titles_and_Qid['title'] )
{
// Grab the title for the first array
$title = $titles [ $tags_and_Qid['question_id'] ] ['title'];
// Grab the tags for the question from the second array
$tags = $end_array [ $tags_and_Qid['question_id'] ] ['tag'];
// Grab the username for the question from the second array
$username = $usernames [ $tags_and_Qid['question_id'] ] ['username'];
--- cut ----
}
}
我经常需要使用此代码。唯一的区别是第一个示例中的array_reverse (..., true)
。
我试图通过创建一个函数organize_question
来解决这个问题。我没有成功:
function organize_questions ( $tab ) {
if ( $_GET['tab'] == 'newest' ) {
echo ( "array_reverse ( $end_array , true )" );
// Problem here!
}
if ( $_GET['tab'] == 'oldest' ) {
echo ( "$end_array" );
// this does not work
} else {
echo ( "array_reverse ( $end_array , true )" );
// Problem here!
}
}
然后我将代码中的相关行更改为:
foreach( organize_question( $tab ) as $tags_and_Qid['question_id'] => $titles_and_Qid['title'] )
问题在于将变量从一个函数转移到另一个函数 我试图将所有必要的变量放在函数的参数中,但是一切都被破坏了,因为这个函数有很多依赖。
我是PHP的新手,所以必须有比我正在尝试的更简单的方法。
答案 0 :(得分:5)
听起来这部分代码可以完成大部分工作:
// Go through each question
foreach( array_reverse( $end_array, true ) as $tags_and_Qid['question_id'] => $titles_and_Qid['title'] )
{
-- cut ---
}
我会将$_GET['tab']
检出你的organize_questions()
功能,并在其他地方做出参数决定。像这样:
function organize_questions($array)
{
foreach($array as $questionId => $title )
{
//do the work
}
}
然后将您的决策制定在其他地方:
if ( $_GET['tab'] == 'newest' )
{
organize_questions(array_reverse ( $end_array , true ));
}
else if ( $_GET['tab'] == 'oldest' )
{
organize_questions($end_array);
}
else
{
//etc.
}
答案 1 :(得分:1)
function organize_questions ()
{
if ( $_GET['tab'] == 'newest' )
{
print_r( array_reverse( $end_array , true ) );
}
else if ( $_GET['tab'] == 'oldest' )
{
print_r($end_array);
}
else
{
print_r(array_reverse ( $end_array , true ) );
}
}
我删除了回声并使用了print_r(假设这些变量实际上是数组)。另外,除非你在函数中的其他地方使用$ tab,否则它是不需要的。
编辑:我实际上不会使用print_r ...它对调试很有用。通常你需要一些方法从你想要显示的数组中挑选碎片,并使用回声或打印单个碎片。EDIT2:我在这方面得到了投票和投票。它用正确的语法重写了有问题的函数。问题的部分内容非常模糊,所以我会继续。您似乎也要求将信息传递给函数。有问题的$ _GET ['tab']是访问get变量(yoursite.com/index.php?tab=newest)。您似乎要问的是如何使用功能。你有正确的说法:
function organize_questions( $tab )
{
...
}
假设您要使用变量选项卡。为了使用这个函数,你可以从文件中的另一个函数或者执行php_require或php_include的另一个文件中调用它:
$mytab = 'bob';
organize_questions( $mytab);
然后你会使用你之前创建的函数中的原始$ tab,或者我在上面用参数列表中的$ tab指出
答案 2 :(得分:1)
这是一个很好的问题。你肯定可以花很长时间尝试不同的方法来避免重用代码。我可能会做一个上面列出的功能建议,但另一个选择是将代码放在一个单独的PHP文件中,然后将其包含在您想要的位置。这基本上相当于其他语言的内联函数,如果你担心执行速度,这是一个很好的方法。但是,在大多数情况下,您会更担心通过http发送客户端的页面大小,因此这不会像编写函数那样可接受。我大多指出每种情况都有一个不同的“最佳”解决方案 - 在你的情况下,我会说McAden的答案很好。
使用include:
//myscript.php
if ( $_GET['tab'] == 'newest' )
{
print_r( array_reverse( $end_array , true ) );
}
else if ( $_GET['tab'] == 'oldest' )
{
print_r($end_array);
}
else
{
print_r(array_reverse ( $end_array , true ) );
}
然后在你的代码中:
//myexecutionplace.php
$end_array = foo;
include 'myscript.php';
doStuffWith($end_array);
$end_array = foo2;
include 'myscript.php';
doStuffWith($end_array2);
答案 3 :(得分:1)
您正在寻找的是一种策略......
$strategies = array(
'oldest' => create_function(
'$questions',
'return organize_questions($questions);'
),
'hottest' => create_function(
'$questions',
'return organize_questions(sort_by_hottness($questions));'
),
'default' => create_function(
'$questions',
'return organize_questions(array_reverse($questions, true));'
),
);
$strategy = 'default';
if (array_key_exists($strategies, $_GET['tab'])
$strategy = $_GET['tab'];
print_r( $strategies[$strategy]($questions) );
你基本上是说你有这些东西(问题),你想做什么(排序)。
您可能还想查看usort函数http://www.php.net/manual/en/function.usort.php
答案 4 :(得分:0)
function sortArray($direction, $array)
{
switch ($direction) {
case 'oldest':
return array_reverse($array, true);
case 'newest':
return $array;
default:
return array();
}
}
function processQuestions($array)
{
foreach($array as $tags_and_Qid['question_id'] => $titles_and_Qid['title'] ) {
//code
}
}
$sortedArray = sortArray($tab, $end_array);
processQuestions($sortedArray);
你应该改写以下内容。
foreach($array as $tags_and_Qid['question_id'] => $titles_and_Qid['title'] )
//could be rewritten as
foreach($array as $question_id => $title)