选择数组中属于2个特定元素的所有元素

时间:2012-08-28 16:57:43

标签: php arrays

我有一个普通的,无聊的旧数组,其中包含大量数据。假设数组的结构如下:

$myArray = array( 'a','b','c','START','d','e','f','END' );

现在,我需要只选择START之后但END之前的值。所以,在这个例子中,我需要选择值'd','e'和'f'。

这是棘手的部分; START将始终存在,但END可能会也可能不会(这是从服务器返回数据的方式)。如果START和END都存在,那么我只需要在2.之间的值,如果只存在START,那么只需从START中选择所有值直到数组结束。 'START'没有固定的索引;它的位置根据服务器提供的数据而变化。

那么在两个指定值之间剔除这些值然后将它们保存到新数组会有什么快速,相对轻松的方法呢?

编辑:我能够运作的唯一实现是@nickb提供的实现,在评论中更进一步。我已将其添加到此OP中,以方便其他人使用。

array_shift( $array[0]); // Get rid of the 'count' element
$start = array_search( 'registered:current', $array[0], true);
$end = array_search( 'END', $array[0], true); // Change 'END' to whatever it is
$return = array_slice( $array[0], $start + 1, ($end ? ($end - $start - 1) : null));

4 个答案:

答案 0 :(得分:2)

这个怎么样?

$end = array_search( 'END', $array, true);
$return = array_slice( $array,
    array_search( 'START', $array, true) + 1,
        ($end ? ($end - count( $array)) : null)
);

如果找不到'END'array_search()将返回false,这会导致将array_slice()的第3个参数设置为null,并返回其余的元素数组,从'START'开始。但如果找到'END',您将获得一个包含'START''END'之间元素的数组,如this demo中所示。

编辑:这是一个更简单的实现,直接使用索引,这是基于Matt的编辑和一些调整,使其不包括分隔符:

$start = array_search( 'START', $array, true) + 1; // +1 to get rid of 'START'
$end = array_search( 'END', $array, true);
$return = array_slice( $array, $start, ($end ? ($end - $start - 1) : null)); // Omit 3rd param if 'END' is not found

编辑:最终实施:

array_shift( $array[0]); // Get rid of the 'count' element
$start = array_search( 'registered:current', $array[0], true);
$end = array_search( 'END', $array[0], true); // Change 'END' to whatever it is
$return = array_slice( $array[0], $start + 1, ($end ? ($end - $start - 1) : null));

答案 1 :(得分:0)

array_search()返回索引。试试这个:

$startIndex = array_search("START", $myArray);
$endIndex = array_search("END", $myArray);
if ($endIndex === false) {
    $endIndex = count($myArray) - 1;
}

$newArray = array();

for($i = $startIndex; $i < $endIndex; $i++) {
    // do your thing
    $newArray[] = $myArray[$i];
}

更新:可以使用array_slice()代替循环。

$newArray = array_slice($myArray, $startIndex, $endIndex - $startIndex);

答案 2 :(得分:0)

$myArray = array( 'a','b','c','START','d','e','f','END' );

$arr = array();
$start = false;
foreach($myArray as $val) {
   if($val == 'END') {
       break;
   }

   if($start) {
       $arr[] = $val;
   }

   if($val == 'START') {
       $start = true;
   }
}

print_r($arr);

答案 3 :(得分:-2)

foreach ($myArray as $A){
    if(//condition of the elements you want to display){

      }
}

如果我们确切知道您的阵列是如何构建的,那将会更有帮助。