0

配列内の文字列を見つけて、インデックスを返し、別の配列内のそのインデックスをチェックして、一致するかどうかを確認しようとしています (それぞれ配列内のオープン時間と一致するクローズ時間を探しています)。

文字列は に複数回出現する可能性があり、 と の両方で$openList一致する時間のペアが見つかるまでチェックを停止すべきではありません。最初の出現のみを見つけるため、機能する効率的なループを作成するのに問題があります(これを異なる検索値で複数回実行します)。$openList$closeListarray_search

これまでのところ、次のようなものがあります。

$openList = array("10:00", "9:00", "10:15", "9:00", "2:30");
$closeList = array("2:15", "5:30", "10:30", "10:00", "3:00");

$found_key = false;
while (($key = array_search("9:00", $openList)) !== NULL) {
  if ($closeList[$key] == "10:00") {
    $found_key = true;
    echo "found it at position ".$key;
    break;
  }
}
if (!$found_key) echo "time doesn't exist";

どうすれば効率的に修正できますか?

4

3 に答える 3

1

array_keys がまさに探しているものであることを確認してください。

http://www.php.net/manual/en/function.array-keys.php

于 2013-10-01T16:59:11.840 に答える
0

リストにない場合、現在のループは永久に実行さ"9:00"れます。代わりに、foreach ループを使用して$openList配列を調べます。

foreach ( $openList as $startTimeKey => $startTimeValue )
{
    //Found our start time
    if ( $startTimeKey === "9:00" && isset( $closeList[ $startTimeValue ] ) && $closeList[ $startTimeValue ] === "10:00" )
    {
        $found_key = true;
        break;
    }
}
于 2013-10-01T17:05:14.433 に答える
0

array_keys@David Nguyenを見るヒントをありがとう。これはうまくいくようです:

$openList = array("10:00", "9:00", "10:15", "9:00", "2:30");
$closeList = array("2:15", "5:30", "10:30", "10:00", "3:00");

$found_key = false;
foreach (array_keys($openList, "9:00") AS $key) {
  if ($closeList[$key] == "10:00") {
    $found_key = true;
    echo "found it at position ".$key;
    break;
  }
}
if (!$found_key) echo "time doesn't exist";
于 2013-10-01T17:37:30.690 に答える