2013-06-12 53 views
0

所以這可能是一件簡單的事情,我只是在看,但我需要弄清楚如何做到這一點。這是我正在上課的一個問題,但我並不期望有人爲我做我的工作(我永遠不會這樣學習),我更希望找到一個好的起點。在這個例子中,我需要創建一個數組,然後對其進行排序。我得到了很多。比較兩個php數組,看看其中一個是否與另一個相反

最後一部分是將給定數組與可能的反轉版本進行比較,如果是正確的反轉則輸出「True」,否則輸出「False」。它也需要在不使用內置php數組函數的情況下完成。我對編程還很陌生,想學習。任何幫助將不勝感激,因爲我甚至不知道最後一部分從哪裏開始。 這是我到目前爲止。

<?php 

//Original array 
$the_array = array(5,9,2,8,3,1,7,6,4); 
$arrayString = implode(',',$the_array); 
echo ("The original array is: "); 
echo $arrayString; 
echo "<br />"; 

//Sort loop 
// Compares each value in the array to the next one by seeing if the value is greater then the next +1 
// If the value is greater then the next value +1 then it stores the value and moves it into the next position. 
for ($j = 0; $j < count($the_array); $j++) 
{ 
    for ($i = 0; $i < count($the_array)-1; $i++) 
    { 
     if ($the_array[$i] > $the_array[$i+1]) 
     { 
      $tmp = $the_array[$i+1]; 
      $the_array[$i+1] = $the_array[$i]; 
      $the_array[$i] = $tmp; 
     } 
    } 
} 
$arrayString = implode(',',$the_array); 
echo ("The array after sorting is: "); 
echo $arrayString; 
echo "<br />"; 

//reversal loop 
for ($tmp = sizeof($the_array) - 1; $tmp >= 0; $tmp--) 
{ 
    $reverse[] = $the_array[$tmp]; //New reversed array 
} 
echo ("The reversed array is: "); 
$reverseString = implode(',',$reverse); 
echo $reverseString; 

我的代碼格式化的任何提示也將不勝感激。

我實際上想要感謝所有我得到的答覆以及獲得答案的速度。所有的評論和答案已經開始給我很多幫助。我想我可能剛剛結束思考這個問題,並且指出的一些事情幫助我意識到了這一點。再次感謝所有人。

+0

爲什麼你不能只在給定的數組上運行你的反轉函數,然後比較它的第二個數組,看看它是否確實是反向的呢? –

+0

@Prix:不需要知道數組是否已排序,問題應該集中在如何確定兩個數組是否相反。 –

+0

@DaveChen這就是所謂的基礎編輯,它不被接受。 – Prix

回答

3
  • A是所述第一陣列和B是第二陣列
  • 如果長度的B然後
    • A ==長度對於 i = 0到LENGTH(A) - 1
      • 如果A[i]!= B[LENGTH(A) - 1 - i]
        • 返回
    • 返回
  • 否則
    • 返回
+1

最好的答案是不用手工餵食家庭作業解決方案。 +1 –

+0

感謝您給我一個出發點,同時讓我思考它。我不想被勺子餵食。雖然每個人都有非常好的觀點和想法。 – Kgrover3

0

課程的easist方式:

$array1 = array(1,2,3); 
$array2 = array(3,2,1); 

if($array1 == array_reverse($array2)){ 
    echo 'Reverse duplicates'; 
} 

如果您無法使用陣列功能,那麼我們就可以通過循環使用for聲明:

<?php 
$array1 = array(1,2,3); 
$array2 = array(3,2,1); 
$future_array2 = array(); 

for($x=(count($array1)-1);$x>=0;$x--){ 
    $future_array2[] = $array2[$x]; 
} 

echo '<pre>',print_r($future_array2),'</pre>'; 

$array2 = $future_array2; 

if($array1 == $array2){ 
    echo 'Reverse duplicates'; 
} 
0

盡你所能首先檢查兩個數組的長度是否相同。如果他們不是這樣,你就知道一個不是另一個的逆轉。

接下來,運行$ arr1從開始到結束的索引,並將其與$ arr2的長度索引進行比較。

如果你被卡住,該代碼將是:

function is_reversed($a1, $a2){ 
    $n = count($a1); 
    if ($n != count($a2)){ return false; } 
    for($i=0; $i<$n; $i++){ 
     if ($a1[$i] != $a2[$n-1-$i]) return false; 
    } 
    return true; 
} 
+0

您發佈的代碼非常簡單,易於理解,並且在構建我的循環時給了我一些好點的思考。 – Kgrover3

0

不要overthink它。沒有理由實際上顛倒其中一個陣列。

你真的只需要遍歷一個數組,並將每個元素與另一個數組中相應反轉位置的元素進行比較。如果你發現某些東西不匹配,你可以立即得出結論,你的答案是錯誤的。

這種方法只適用,如果你的數組的長度相同,但如果他們不一樣長,你的答案會自動爲假,反正,這樣你就可以檢查你開始之前。

你應該可以在10行以下的代碼中做到這一點。

+0

你說得對,它花了我大約11行,這是一些整齊的空間。這真的是一個簡單的問題,我一直在想。 – Kgrover3

相關問題