1

たくさんのデータが入っている、普通の退屈な古い配列があります。配列が次のように構成されているとしましょう。

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

ここで、STARTの後、ENDの前にある値のみを選択する必要があります。したがって、この例では、値'd'、'e'、および'f'を選択する必要があります。

ここに注意が必要な部分があります。STARTは常に存在しますが、ENDは存在する場合と存在しない場合があります(これがサーバーからデータが返される方法です)。STARTとENDの両方が存在する場合は、2。の間にある値が必要です。STARTのみが存在する場合は、STARTから配列の最後までのすべての値を選択するだけです。「START」には固定インデックスがありません。その場所は、サーバーから提供されたデータに応じて変わります。

では、これらの値を2つの指定された値の間に取り除いて、新しい配列に保存するための、迅速で比較的簡単な方法は何でしょうか。

編集:私が機能させることができた唯一の実装は、コメントのさらに下にある@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を返します。これにより、3番目のパラメーターがarray_slice()に設定さnullれ、配列内の残りの要素が。から始まり'START'ます。ただし、が見つかった場合は、このデモに示すように、と'END'の間の要素を含む配列を取得します。'START''END'

編集:これは、インデックスを直接使用するより単純な実装です。これは、区切り文字を含まないようにいくつかの調整を加えた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));
于 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 に答える