0

チームのメンバーがその月の毎日どれだけ忙しいかを示すカレンダーを作成しています。

私はその中に人がいる配列を持っています:$teammates

各チームメイトは別の配列であり、名前と利用可能な日(月曜日から日曜日)を含む別の配列が含まれています。

{exp:channel:entries channel="teammates"}
$teammate = array();
$available_days = array();

{available_days} // this is a PT-checkbox field, it loops through a list of selected checkboxes (mon, tue, wed, etc).
array_push($available_days, "{option_name}");
{/available_days}

$teammate["name"] = "{title}";
$teammate["available_days"] = $available_days;
$teammate["workdays"] = array();

array_push($teammates, $teammate);
{/exp:channel:entries}

今では毎月違って見えます。たとえば、8月1日は水曜日で、9月1日は土曜日です。そのため、日の名前と日の番号のペアを含む、今月の配列も作成する必要があります。[["day_name" => "wed", "day_number" => 1], ["day_name" => "thu", "day_number" => 2], ... etc]

これは、{exp:channel:calendar}タグを使用して行われます。詳細は関係ありません。と呼ばれる配列になってしまい$days_array_fullます。

次のステップは、月の日と各チームメイトの利用可能な日を組み合わせることです。そのため、それぞれの中に、$teammateその人がいる正確な日を含む配列が作成されます。これを「就業日」と呼びます。私はこれを次のように行います:

foreach($teammates as $teammate) {

    foreach($teammate["available_days"] as $available_day) {
        foreach($days_array_full as $day) {
            if($day["name"] == $available_day) {
                array_push($teammate["workdays"], array("name" => $day["name"], "number" => $day["number"]));
            }
        }

    }

    echo(count($teammate["workdays"]));
    // this echoes correct counts, such as about 25 for people who work 5 d/w.
}

しかし、後でチームメイトにアクセスしようとすると$teammate["workdays"]、配列は空になります。

foreach($teammates as $teammate) {
    echo(count($teammate["workdays"]));
    // this always gives 0 for any teammate..., why?
}

ExpressionEngineがでPHPコードを実行するため、これはある種のスコープの問題eval()だと思いますが、それを機能させるために何を変更すればよいかを実際に理解することはできません。

4

1 に答える 1

0

参照を使用するにはarray_push、すでに配列である必要があります。つまり、初期化する必要があります。

foreach($teammates as $key => $teammate) {
    $teammate["workdays"] = array();
    ...
}

さらに詳しく:を使用する代わりにarray_push、次のアノテーションを使用できます。

$teammate["workdays"][] = array("name" => $day["name"], "number" => $day["number"]);

最後に、新しく作成された配列を次のように書き戻す必要があります$teammates

foreach($teammates as $key => $teammate) {
    ...
    $teammates[$key] = $teammate;
}

ただし、次$teammateのように単純に参照として使用することをお勧めします。

foreach($teammates as &$teammate) {
    ...
}
于 2012-08-03T18:57:26.123 に答える