2013-02-25 71 views
0

我想建立具有密鑰作爲時間戳陣列,以及由於某種原因,它的工作原理,當我手動建立它,但是當我嘗試合併它不工作新物品。PHP陣列Key作爲時間戳和合並工作不

我讀合併的最快方法是:[]數組,但它增加了[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']; 

任何幫助將不勝感激。

+2

不太明白。你有什麼輸入數據?什麼是你想要的輸出數據? – 2013-02-25 10:18:48

+0

爲什麼'$ maxCapArray'在同一行上定義兩次?第二個定義將覆蓋第一個,所以難怪你只能得到最後一個項目。 – SDC 2013-02-25 14:29:26

回答

1

不能添加元素,如$maxCapArray[]= $timeStamp => array('Book'=>'BLABLA','Author'=>'BLOBLO');

  • 你可以這樣做:

    $ V =陣列();
    $ V [] =陣列( 「A」=>數組(1,2,3));

這將得到:

print_r($v); 
Array ([0] => Array ([a] => Array ([0] => 1 [1] => 2 [2] => 3))) 
  • 或該:

    $ V [ 「一個」] =陣列(1,2,3);

將得到:

print_r($v); 
Array ([a] => Array ([0] => 1 [1] => 2 [2] => 3)) 
+0

嗨Fedorqui, 我做到了這一點:$ v [$ timeStamp] = array(1,2,3);並嘗試像這樣手動回顯它:echo $ v [$ timestamp] [0],並嘗試了$ timestamp,'$ timestamp',字符串($ timestamp),strval($ timestamp) 但不起作用,任何想法? – Sebastian 2013-02-25 14:11:40

+0

這應該工作:'$ timestamp =「aaaa」; $ v [$ timestamp] = array(1,2,3); print_r($ v); 回聲「嗨,這是」。 $ V [$時間戳] [0];'。問題是你必須保持索引'$ timestamp'。如果$ timestamp再次被定義,您將無法訪問它。因此,使用'print_r($ v)'來檢查數組是如何定義的。 – fedorqui 2013-02-25 14:16:35

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); 

?> 
+0

嗨,考拉,版本2更接近我想要的。 現在更清楚如何創建數組。 但要檢索它,我有$ timestamp&$ Book,並且我想獲得 作者。我該如何調用數組? //這給了作者,但我需要知道正確的索引號,我沒有 回聲$ maxCapArray [$時間戳] [「作者」] [0]「。
'; echo $ maxCapArray [$ timestamp] ['Author'] [1]。'
'; 它應該是這樣的: echo $ maxCapArray [$ timestamp] ['Author'] [$ Book]。'
'; 並且應該給 - > Author for specific $ timestamp&Book – Sebastian 2013-02-25 13:07:49

+0

更新了我的答案。請閱讀**更新**部分。我的建議是使用SQLite或MySQL數據庫,你。請看看我的例子。如果你覺得它有用,去搜索互聯網瞭解更多信息。 – 2013-02-25 14:13:44

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()合併數字lly索引數組,鍵將從零開始重新索引,請參閱http://php.net/manual/en/function.array-merge.php