2016-12-27 25 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

相关问题