1

我有一个普通的、无聊的旧数组,里面有很多数据。假设数组的结构如下:

$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

4 回答 4

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()设置为null,返回数组中的剩余元素,从 开始'START'。但如果找到 ,您将获得一个包含和'END'之间元素的数组,如本演示所示。'START''END'

编辑:这是一个直接使用索引的更简单的实现,它基于马特的编辑,并进行了一些调整以使其不包含分隔符:

$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));
于 2012-08-28T17:02:10.400 回答
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);
于 2012-08-28T17:01:02.433 回答
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);
于 2012-08-28T17:05:38.607 回答
-2
foreach ($myArray as $A){
    if(//condition of the elements you want to display){

      }
}

如果我们确切地知道您的数组的结构,那么提供帮助会更容易。

于 2012-08-28T17:02:57.720 回答