0

キーをタイムスタンプとして持つ配列を作成したいのですが、何らかの理由で手動で作成すると機能しますが、新しいアイテムをマージしようとすると機能しません。

マージする最速の方法は、array []を使用することですが、キーの前にインデックス[0]、[1]が追加されるため、これを回避する方法も見つける必要があります。タイムスタンプでキーにアクセスする必要があるため。

$timeStamp=mktime(0, 0, 0, date("m"), date("d"), date("Y"));

$maxCapArray=array();

// IDEAL MERGING BUT NOT WORKING: $maxCapArray[]= $timeStamp => array('Book'=>'BLABLA','Author'=>'BLOBLO');

// (string) NOT WORKING: $maxCapArray[]= (string)$timeStamp => array('Book'=>'BLABLA','Author'=>'BLUBLU');

$maxCapArray = array($timeStamp => array('Book'=>'BLABLA','Author'=>'BLEBLE')); $maxCapArray = array($timeStamp => array('Book'=>'BLABLA','Author'=>'BLIBLI'));

// MANUALLY ONLY TAKES THE LAST ITEM:

echo $maxCapArray[$timeStamp]['Author'];

どんな助けでもありがたいです。

4

3 に答える 3

1

のような要素を追加することはできません$maxCapArray[]= $timeStamp => array('Book'=>'BLABLA','Author'=>'BLOBLO');

  • あなたはこれを行うことができます:

    $v=配列();
    $v[]=array("a"=>array(1,2,3));

これは次のようになります:

print_r($v);
Array ( [0] => Array ( [a] => Array ( [0] => 1 [1] => 2 [2] => 3 ) ) )
  • またはこれ:

    $v["a"]=配列(1,2,3);

これは次のようになります:

print_r($v);
Array ( [a] => Array ( [0] => 1 [1] => 2 [2] => 3 ) )
于 2013-02-25T10:20:01.753 に答える
1

最終的にどのような構造が必要になるかは明確ではありません。

次のようなものが必要になる場合があると思います。

<?php

// initial an empty array
$maxCapArray=array();

// first run on a day
$timeStampA=mktime(0, 0, 0, date("m"), date("d"), date("Y"));
$maxCapArray[$timestampA] = array('Book'=>'BLABLA','Author'=>'BLEBLE');

// second run on a different day
$timeStampB=mktime(0, 0, 0, date("m"), date("d"), date("Y"));
$maxCapArray[$timestampB] = array('Book'=>'BLABLA','Author'=>'BLEBLE');

// third run on yet another day
$timeStampC=mktime(0, 0, 0, date("m"), date("d"), date("Y"));
$maxCapArray[$timestampC] = array('Book'=>'BLABLA','Author'=>'BLEBLE');

// ...

// to retrieve the Author of a given timestamp
echo $maxCapArray[$timestampA]['Author'];
echo $maxCapArray[$timestampB]['Author'];
echo $maxCapArray[$timestampC]['Author'];

?>

最初の行は、以前に取得したすべてのデータを削除します。論理的に使ってください。

別の推測:

<?php

// initial an empty array
$maxCapArray=array();
$timeStamp=mktime(0, 0, 0, date("m"), date("d"), date("Y"));

// suppose you want $maxCapArray[$timestamp]['Book'] and $maxCapArray[$timestamp]['author']
// to be arrays
if (!isset($maxCapArray[$timestamp])) $maxCapArray[$timestamp] = array();
$maxCapArray[$timestamp]['Book'][]   = 'BLABLA';
$maxCapArray[$timestamp]['Author'][] = 'BLEBLE';

$maxCapArray[$timestamp]['Book'][]   = 'BLABLA 2';
$maxCapArray[$timestamp]['Author'][] = 'BLEBLE 2';

// ...

// you should get an array:
var_dump($maxCapArray[$timestamp]['Author']);

?>

更新:これを探しているようです

<?php

// initial an empty array
$maxCapArray=array();
$timeStamp=mktime(0, 0, 0, date("m"), date("d"), date("Y"));

// suppose you want $maxCapArray[$timestamp]['Book'] and $maxCapArray[$timestamp]['author']
// to be arrays
if (!isset($maxCapArray[$timestamp])) $maxCapArray[$timestamp] = array();
$maxCapArray[$timestamp]['Author']['Book 1'] = 'Author 1';
$maxCapArray[$timestamp]['Author']['Book 2'] = 'Author 2';
$maxCapArray[$timestamp]['Author']['Book 3'] = 'Author 2';

// ...

// review your array:
var_dump($maxCapArray[$timestamp]['Author']);

// retrieve
$author_name = 'Author A';
$book_name = 'Book 1';
echo $maxCapArray[$timestamp][$author_name][$book_name];

?>

もう少しアドバイス

配列は、1 つの特定の状況に対してのみインデックス構造を行います。そして数日後、別のものが必要になるかもしれません。おそらく、本ごとに著者を検索するか、本ごとにタイムスタンプを検索する必要があるでしょう。知るか?

これらのケースでは、リレーショナル データベースを使用することをお勧めします。次のように、MySQL でデータベース テーブルを作成できます。

+-----------+---------------------+------------------------------------------+---------------------+
| record_id | author              | book                                     | timestamp           |
+-----------+---------------------+------------------------------------------+---------------------+
| 1         | Jules Verne         | Twenty Thousand Leagues Under the Sea    | 2013-01-12 12:24:00 |
| 2         | Jules Verne         | Journey to the Center of the Earth       | 2013-01-12 13:01:00 |
| 3         | William Shakespeare | Hamlet                                   | 2013-01-12 16:51:00 |
+-----------+---------------------+------------------------------------------+---------------------+

MySQL はすべてのインデックス作成作業を自動的に行います。

その後、データが必要になったら、データベースに接続して以下を読み取ることができます。

<?php

// connect to 
mysql_connect('localhost', 'db_user', 'db_password');
mysql_select_db('library_database');

// ask database of books of a certain timestamp and of certain author
$results = mysql_query('SELECT author FROM book_records WHERE 
  timestamp="2013-01-12 13:01:00" AND book="Journey to the Center of the Earth"');

// read the database's answer to $books array
$authors = array();
while (($row = mysql_fetch_assoc($results)) != FALSE) {
  $authors = $row['author'];
}

// you may examine the array here
// this is a list of author of the specific timestamp
// and of specific book
var_dump($authors);

?>

別の必要がある場合は、コードを変更するだけです。

<?php

// connect to 
mysql_connect('localhost', 'db_user', 'db_password');
mysql_select_db('library_database');


// if you want to have all the timestamp of a book and an author
// you may just do this
$results = mysql_query('SELECT timestamp FROM book_records WHERE 
  author="Jules Verne" AND book="Journey to the Center of the Earth"');


// read the database's answer to $books array
$timestamps = array();
while (($row = mysql_fetch_assoc($results)) != FALSE) {
  $timestamps = $row['timestamp'];
}

// this is the list of related timestamp
var_dump($timestamps);

?>
于 2013-02-25T10:22:24.560 に答える
0

あなたはこれを探しているかもしれません:

$timeStamp = mktime(0, 0, 0, date("m"), date("d"), date("Y"));
$maxCapArray = array();

$maxCapArray[$timeStamp] = array();
$maxCapArray[$timeStamp][] = array('Book'=>'BLABLA','Author'=>'BLEBLE');
$maxCapArray[$timeStamp][] = array('Book'=>'BLABLA','Author'=>'BLIBLI');

echo $maxCapArray[$timeStamp][0]['Author']; // == BLEBLE

array_merge()数値でインデックス付けされた配列をマージするために使用する場合、キーはゼロから再インデックス化されることに注意してください。http://php.net/manual/en/function.array-merge.phpを参照してください。

于 2013-02-25T10:26:26.897 に答える