0

私はこれについて頭を悩ませようとして頭を叩いています。私は以前に配列を扱ったことがありますが、PHPでは配列に苦労しているようです。私はここや他の場所で質問を見てきましたので、この質問がおそらくどれほど基本的であるかを前もってお詫びします。私がやろうとしているのは、配列の配列を作ることです???

基本的に、私はセッションをグローバル変数にして、配列を格納し、継続的に追加できるようにしようとしています。

$_SESSION['school'] = array('events' => array());

イベント配列の例は次のようになります。

events['name'] = 'Homecoming';
events['date'] = 'December 15, 2012';
events['cost'] = 18.00;
events['attending'] = array();
events['attending'][$i] = 'John'

その場合の使用は何かになります

echo $_SESSION['school'][$i][events]['name']; 
echo $_SESSION['school'][$i][events]['date']; 
echo $_SESSION['school'][$i][events]['cost'];

..。

上記のように作成して、このように入力してみました(ここでもイベント配列の配列)

$_SESSION['school'] = array('events' => array());

$_SESSION['school'][$i][events]['name'] = 'Homecoming';
$_SESSION['school'][$i][events]['date'] = 'December 15, 2012';
$_SESSION['school'][$i][events]['cost'] = 18.00;
$_SESSION['school'][$i][events]['people'] = array('jane', 'john', 'bill');

値が入力されるにつれてカウントが増加していることがわかるため、これは機能していないようです。私は他のいくつかの方法を試しましたが、何らかの理由でそれを理解することができませんでした。私が出くわしたほとんどの例は、私がやろうとしていることと似ていないようです。どんな助けでも大歓迎です。

--------フィードバックに基づく更新された質問--------更新されたロジックを理解していると思います。コードを更新しようとしましたが、次の問題が発生しています。 。$ _SESSION ['school'] = array(array());を設定する初期化phpスクリプトがあります。これは後でまで入力されません。ある時点で、$ _SESSION['school']をカウントでチェックします。何も追加されていなくても、最初のチェックで常に1を返します。ただし、空の配列を1つ保持しているため、このように想定しています。ですから、構造に疑問を投げかけます。私は視覚的な人間なので、これが必要だと思いますが、どのように構築すればよいかわかりません。

//would be an 1 dimensional array that empty until a school is added later on in code.
$_SESSION['school'] = array();

その要素は、要素を含む多次元配列を保持します

['name'] = 'Johnson High';
['address'] = '121 elm';
['city'] = 'san jose';
['state'] = 'California';
['events'] = array();

['events']はイベントが追加されるまで空ですが、ここに含まれるアイテムがいくつかあります

['events']['name'] = 'homecoming';
['events']['date'] = 'December 15, 2012';
['events']['cost'] = '18.00';

結局、$ _ SESSION ['school']は、私がループできる1対多の学校を保持することができました。

danLの更新されたロジックについての私の誤解に、名前とイベントがどのように同じインデックスを持つかわかりませんか?コードを見ると、$ _SESSION['school']は次のようになっているように感じます。

$_SESSION['school']{ 'name' => 'Johnson High',
                     'events' => array('basketball', 'soccer', 'football'),
                     'name' => 'West Forsyth High',
                     'events' => array('basketball', 'soccer', 'football')};

その場合、各要素は異なるインデックスにあります。ここで基本的な何かが欠けているに違いありません。私は絶えず読み上げて、自分が間違っていることとのつながりを作ろうとしています。問題を間違った角度から見ているだけだと思います。

4

2 に答える 2

2

次のように、キーが数字キーでない場合は、キーを引用符で囲む必要があります。

$_SESSION['school']['events']['name'] = 'Homecoming';

しかし、ここで行ったようなことをしたい場合は、次のようにします。

echo $_SESSION['school'][$i]['events']['name'];

次に、次のように$_SESSION['school']変数を宣言する必要があります。

$_SESSION['school'] = array(array('events' => array()));

$ _SESSION ['school']配列を宣言した方法では、3つの次元しかありませんが、$i変数を使用して内部のインデックスを参照しているセクションで4つの次元にアクセスしようとしています。アレイ。

更新:これは、空の学校の配列にイベントを追加する方法です

$_SESSION['school'] = array(array());
$_SESSION['school'][]['name'] = 'Johnson High';
$_SESSION['school'][]['events'] = array('basketball', 'soccer', 'football');
$_SESSION['school'][]['name'] = 'West Forsyth High';
$_SESSION['school'][]['events'] = array('theater', 'football', 'lacrosse');

次に、次のようにそれらをループできます。

for($i = 0; $i < sizeof($_SESSION['school']); $i++) {
   echo 'School name: ' . $_SESSION['school'][$i]['name'] . '<br />';
   echo 'Events:<br />';
   foreach($_SESSION['school'][$i]['events'] as $event) {
      echo $event . '<br />';
   }  
   echo '<br />';
}

これにより、次のように出力されます。

School name: Johnson High
Events:
basketball
soccer
football

School name: West Forsyth High
Events:
theater
football
lacrosse

それがあなたが求めているものだといいのですが。あなたが何を達成しようとしているのか正確に理解できなくてすみません。

于 2012-12-29T05:43:39.793 に答える
0

わかりました、それでdanLの助けに基づいています(どうもありがとう)。私は自分が何をする必要があるかを理解しました。したがって、初期化スクリプトで設定したのは、

$_SESSION['school'] = array();

さらに処理した後、情報を格納するイベント配列を作成します。

$event = arra();
$event['name'] = 'Homecoming';
$event['date'] = 'December 15, 2012';
$event['cost'] = '18.00';
$event['people'] = array();
$event['people'] = { 'john', 'mary', 'mark', 'janice'};

最後の2行はおそらく1行に結合できます。

次に、イベント配列を学校の配列に次のように追加します。

$_SESSION['school'][] = $event;

連想配列を使って簡単にスピンできる方法はわかりませんが、すべての助けに感謝します。

于 2012-12-29T16:31:34.493 に答える