2016-12-27 50 views

回答

0
$array = array('3X' => '3X','EX'=> 'EX','VG'=>'VG','G'=>'G','F'=>'F','P'=>'P'); 
$start = "3X"; 
$end ="F"; 
$new_array = []; 
$i=0;$go=false; 
foreach ($array as $element) { 
    if($go){ 
     $new_array[$i] = $element; 
     $i++; 
    } 
    if($element==$start){ 
     $go = true; 
    } 
    if($element==$end){ 
     $go = false; 
    } 
} 
$total_elems_new = count($new_array); 
unset($new_array[$total_elems_new-1]); 
print_r($new_array); 

Testeed上PHP 5.6

+2

雖然此代碼片段可能會解決問題,但[包括解釋](http://meta.stackexchange.com/questions/114762/explaining-entirely-code-based-answers)確實有助於提高帖子的質量。請記住,您將來會爲讀者回答問題,而這些人可能不知道您的代碼建議的原因。也請儘量不要用解釋性註釋來擠佔代碼,這會降低代碼和解釋的可讀性! – Rizier123

0

嘗試:

$arr = array('3X' => '3X','EX'=> 'EX','VG'=>'VG','G'=>'G','F'=>'F','P'=>'P'); 

function findValuesBetweenTwoItems($arr, $start, $end) { 
    $result = []; 
    $has_started = false; 
    foreach ($arr as $item->$value) { 
    if(($item != $end && $has_started) || $item == $start) { 
     array_push($result, $value); 
     $has_started = true; 
    } 
    if($item == $end) { 
     array_push($result, $value); 
     return $result; 
    } 
} 
$my_values = findValuesBetweenTwoItems($arr, 'EX', 'F'); 
var_dump($my_values); 
+1

雖然此代碼片段可以解決問題,但[包括解釋](http://meta.stackexchange.com/questions/114762/explaining-entirely-code-based-answers)確實有助於提高您的質量帖子。請記住,您將來會爲讀者回答問題,而這些人可能不知道您的代碼建議的原因。也請儘量不要用解釋性註釋來擠佔代碼,這會降低代碼和解釋的可讀性! – Rizier123

+0

感謝您的建議,我會編輯我的答案。順便說一句,在我的代碼(或其他人的回答)中沒有任何評論,所以退出你的宏 - 或至少一個感嘆號。 – wscourge

0

嘗試這種情況:

$array = array('3X' => '3X','EX'=> 'EX','VG'=>'VG','G'=>'G','F'=>'F','P'=>'P'); 
    $arrayKeys = array_keys($array); 
    $input1 = '3X'; 
    $input2 = 'F'; 
    if(in_array($input1,$array) && in_array($input2,$array)) { 
     if (array_search($input1, array_keys($array)) >= 0) { 
      if (array_search($input2, array_keys($array)) >= 0) { 
       if (array_search($input1, array_keys($array)) < array_search($input2, array_keys($array))) { 
        echo "Keys in between: "; 
        for ($i = array_search($input1, array_keys($array)); $i <= array_search($input2, array_keys($array)); $i++) { 
         echo $array[$arrayKeys[$i]] . ", "; 
        } 
       } else { 
        echo "Keys in between: "; 
        for ($i = array_search($input2, array_keys($array)); $i <= array_search($input1, array_keys($array)); $i++) { 
         echo $array[$arrayKeys[$i]] . ", "; 
        } 
       } 
      } else { 
       echo "Value not found!"; 
      } 
     } else { 
      echo "Value not found!"; 
     } 
    } else{ 
     echo "Value not found!"; 
    } 
+0

雖然此代碼片段可能會解決問題,但[包括解釋](http://meta.stackexchange.com/questions/114762/explaining-entirely-code-based-answers)確實有助於提高帖子的質量。請記住,您將來會爲讀者回答問題,而這些人可能不知道您的代碼建議的原因。也請儘量不要用解釋性註釋來擠佔代碼,這會降低代碼和解釋的可讀性! – Rizier123

0
$from = 'EX'; 
$to  = 'F'; 
$result = null; 
$state = 0; 

foreach ($a as $k => $v) { 
    if (($state == 0 && $from === $v) || ($state == 1 && $to === $v)) 
    $state++; 
    if ($state && $state < 3) 
    $result[$k] = $v; 
    elseif ($state >= 2) 
    break; 
} 

if ($state != 2) 
    $result = null; 

$from的第一次出現的環路搜索,如果$state0(初始值),或者第一次出現$to,如果$state1。對於$state的其他值,循環停止處理。

當找到$from$to時,$state遞增。這些值存儲在$result中,而 $ from $ to`被找到)。

因此,$state == 2意味着兩個值被找到,並且$result含有$from$to之間的$a數組中的值。否則,$result被分配給null

相關問題