2017-08-27 11 views
0

私は適切な予約時間の配列と、日付ごとにすでに予約された配列を含む別の多次元配列を持っています。私は、各日付を繰り返し、最初の配列から自由に予約できる時間を含む日付ごとに、別の別の多次元配列を作成したいと思います。PHP多次元配列はインデックス配列に対して値を比較して削除します

$times = array("9:00", "10:00", "11:00", "12:00", "13:00"); 

$dates = array(
      "28/07/2018" => array("10:00", "11:00"), 
      "29/07/2018" => array("10:00", "13:00"), 
      "30/07/2018" => array("11:00", "13:00")); 



// function to remove duplicates 
function myArrayDiff($array1, $array2) { 
    // loop through each item on the first array 
    foreach ($array1 as $key => $row) { 
     // loop through array 2 and compare 
     foreach ($array2 as $key2) { 
      if ($row['id'] == $key2) { 
       // if we found a match unset and break out of the loop 
       unset($array2[$key2]); 
       break; 
      } 
     } 
    } 

    return array_values($array2); 
} 

$array3 = myArrayDiff($dates, $times); 

print_r($array3); 
+0

問題があり、助けが必要なのは何ですか?あなたの質問からはっきりと分かりません。 – FluffyKitten

+0

インデントされたコードブロックがある場合、バッククォート( '\' ')で囲む必要はありません。実際には、コードブロックにバッククォートが含まれていて、簡単に構文の強調表示を駄目にすることがあります。 – Chris

答えて

0

提供された機能は明らかにどこかからコピーされ、与えられたデータでは機能しません。あなたがやらなければならないことは、毎日の差分倍である(反復日、およびarray_diffで差分を行う)

$times = array("9:00", "10:00", "11:00", "12:00", "13:00"); 
$dates = array(
      "28/07/2018" => array("10:00", "11:00"), 
      "29/07/2018" => array("10:00", "13:00"), 
      "30/07/2018" => array("11:00", "13:00")); 

$filtered = []; 
foreach($dates as $day => $taken_times) { 
    $filtered[$day] = array_values(array_diff($times, $taken_times)); 
} 

print_r($filtered); 
0

私はそれが完全に明確ではなかったので、あなたが後にしているものを全くわからないんだけど、私は作らここではいくつかの仮定があります。

私は、最初の配列で優先される配列(時間)を取得し、2番目のように新しい配列を作成し、利用可能な時間に一致させたいと仮定しています。

注:古いphpの醜いarray()構文よりも優れているので、ここでは新しいPHP配列構文を使用しています。

$preferred = [ 
    "9:00", 
    "10:00", 
    "11:00", 
    "12:00", 
    "13:00" 
]; 

$available = [ 
    "28/07/2018" => [ 
     "10:00", 
     "11:00" 
    ], 
    "29/07/2018" => [ 
     "10:00", 
     "13:00" 
    ], 
    "30/07/2018" => [ 
     "11:00", 
     "13:00" 
    ] 
]; 

$dates = array_keys($available); 
$ideal = []; 
// create an ideal array keyed by the available dates with empty array as values for now. 
// useless now, but useful later. 
foreach ($dates as $date) { 
    $ideal[$date] = []; 
} 
foreach ($available as $date => $hours) { 
    foreach ($hours as $hour) { 
     if (in_array($hour, $preferred) === true) { 
      $ideal[$date][] = $hour; 
     } 
    } 
} 

print_r($ideal); 

私は確かにこれを行うためのより効率的な方法がありますが、これはかなり読めると思います。

希望に役立ちます。あなたが望むものを誤解した場合は、明確にすることができますか?

関連する問題