PHP kodu yeniden en iyi yolu nedir?

5 Cevap php

Code:

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 ----                                                                                                                                                       
      }   
  }

Ben genellikle bu kodu kullanmanız gerekir. Tek fark, ilk örnekte array_reverse (..., true) olduğunu.

Ben bir işlev organize_question, bu sorunu çözmek için yaparak sorunu çözmeye çalıştık. Ben başarısız oldu:

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!
      }
  }

Ben o zaman bu benim kod ilgili çizgi değişti:

 foreach( organize_question( $tab ) as $tags_and_Qid['question_id'] => $titles_and_Qid['title'] )

The problem is in transferring variables from one function to another.
I tried to put all necessary variables in the parameters of the function, but everything gets broken, since there are many dependencies on this function.

Ben PHP için yeni duyuyorum bu yüzden ben ne çalışıyorum daha bunu yapmak için daha kolay bir yolu olmalı.

5 Cevap

Lütfen bu kod parçası eserin toplu yapar gibi geliyor:

  // Go through each question
  foreach( array_reverse( $end_array, true ) as $tags_and_Qid['question_id'] => $titles_and_Qid['title'] )
  {   
          -- cut ---
  }

Ben $_GET['tab'] sizin organize_questions() fonksiyonu kontrol ayırmak ve başka parametre kararlarını yapardı. Bu gibi:

function organize_questions($array)
{
    foreach($array as $questionId => $title )
      {   
            //do the work
      }   
}

Ve sonra başka bir yerde kod yapma kararınızı:

  if ( $_GET['tab'] == 'newest' )
  {
    organize_questions(array_reverse ( $end_array ,  true ));
  }
  else if ( $_GET['tab'] == 'oldest' )
  {
      organize_questions($end_array);
  } 
   else
  {
     //etc.
  }

Bu iyi bir soru. Kesinlikle sadece kod yeniden kendinizi tutmak için farklı yollar denemek uzun bir zaman geçirebilirsiniz. Herhalde yukarıda listelenen gibi işlev önerilerden birini yapardı, ama başka bir seçenek ayrı bir PHP dosyası kodu koymak ve sonra istediğiniz yere dahil etmek olacaktır. Bu temelde diğer dillerde bir satır içi işlevi eşdeğer olur ve yürütme hızı konusunda endişeli iseniz gitmek için iyi bir yoldur. Çoğu durumda, ancak, size http üzerinden müşteri yolluyoruz sayfanın boyutu hakkında daha fazla endişe olacak, bu yüzden bu bir işlevi yazma olarak kabul olmayacaktır. Ben çoğunlukla her durum farklı "iyi" bir çözüm olduğunu işaret ediyorum - senin durumunda ben McAden cevabı iyi bir olduğunu söyleyebilirim.

Kullanma şunlardır:

//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 ) );
}

Ve sonra sonra kodunuzda:

//myexecutionplace.php
$end_array = foo;
include 'myscript.php';
doStuffWith($end_array);
$end_array = foo2;
include 'myscript.php';
doStuffWith($end_array2);
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 ) );
    }
}

Ben yankılanırken kaldırıldı ve (bu değişkenler aslında dizi olduğunu varsayarak) print_r kullanılır. Eğer fonksiyonu başka bir yerde $ sekmesini kullandığınız sürece Ayrıca bu gereksiz oldu.

EDIT: Ben aslında print_r kullanmak olmaz ... Bu hata ayıklama ve bu tür için yararlıdır. Genellikle Eğer gerçekten görüntülemek ve kullanımı echo veya bireysel parçalar için yazdırmak istediğiniz bir diziden parçaları almak için bir yol isterdim.

EDIT2: upvoted ve bu konuda downvoted alıyorum hem de. Bu doğru sözdizimi ile söz işlevini yeniden yazılmış bulunuyor. Sorunun bölümleri çok muğlak yüzden ben devam edeceğiz. Ayrıca fonksiyonları içine geçirilen bilgiler soran gibi görünüyor. Söz $ _GET ['sekme'] ​​(yoursite.com / index.php? tab = yeni) değişkenleri olsun erişiyor. Ne ile soran görünüyor tüm fonksiyonlarını kullanmak için nasıl. Bunu gidiyor düzeltmek vardı:

function organize_questions( $tab )
{
    ...
}

Eğer değişken sekmesini kullanın gittiğini varsayarsak. Bu işlevi kullanmak için size dosya içinde başka bir işlev veya bir php_require veya php_include yapan başka bir dosyadan gibi çağırır:

$mytab = 'bob';
organize_questions( $mytab);

Ben sadece parametre listesinde $ sekmesi ile yukarıda belirtildiği gibi, o zaman bunu daha önce oluşturduğunuz gibi işlevi orijinal $ sekmesini kullanın ya da olurdu

Ne aradığınız bir stratejidir ....

$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) );

Temelde ne (bunları sıralamak) hakkında bir şey yapmak istiyorum bu şeyler (soru) olduğunu söylüyorsun.

Ayrıca usort işlevi bakmak isteyebilirsiniz, http://www.php.net/manual/en/function.usort.php

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);

Ve muhtemelen aşağıdaki yazmanız lazım.

foreach($array as $tags_and_Qid['question_id'] => $titles_and_Qid['title'] )
//could be rewritten as 
foreach($array as $question_id => $title)