以键作为时间戳的PHP数组&;合并不起作用

以键作为时间戳的PHP数组&;合并不起作用,php,arrays,string,multidimensional-array,merge,Php,Arrays,String,Multidimensional Array,Merge,我想构建一个以键为时间戳的数组,由于某种原因,当我手动构建它时它可以工作,但当我尝试合并一个新项时它就不工作了 我知道最快的合并方法是:array[],但它在键前面添加了一个索引[0],[1],我也需要找到一个解决方法。因为我需要通过时间戳访问密钥 $timeStamp=mktime(0, 0, 0, date("m"), date("d"), date("Y")); $maxCapArray=array(); // IDEAL MERGING BUT NOT WORKING: $maxCa

我想构建一个以键为时间戳的数组,由于某种原因,当我手动构建它时它可以工作,但当我尝试合并一个新项时它就不工作了

我知道最快的合并方法是: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'];

任何帮助都将不胜感激。

您不能添加像
$maxCapArray[]=$timeStamp=>array('Book'=>'blablabla','Author'=>'BLOBLO')

  • 您可以这样做:

    $v=数组()
    $v[]=数组(“a”=>数组(1,2,3))

这将得到:

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

    $v[“a”]=数组(1,2,3)

这将得到:

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

现在还不清楚你最终需要什么样的结构

我想你可能需要这样的东西:

<?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'];

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

?>

您可能正在查找以下内容:

$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\u merge()
合并数字索引数组,则键将从零开始重新索引,请参见不太明白。您的输入数据是什么?您需要的输出数据是什么?为什么在同一行中定义了两次
$maxCapArray
?第二个定义将覆盖第一个,所以难怪你只得到最后一项。嗨,考拉,版本2更接近我想要的。现在更清楚了如何创建数组。但要检索它,我有$timestamp&$Book,我想获得Author。我需要如何调用数组?//这给了Author,但我需要知道正确的索引号,我没有echo$maxCapArray[$timestamp]['Author'][0].
;echo$maxCapArray[$timestamp]['Author'][1].
;它应该是这样的:echo$maxCapArray[$timestamp]['Author'][$Book].
';并且应该给->作者指定$timestamp&BookUpdated我的答案。请阅读更新部分。我的建议是使用SQLite或MySQL数据库。请看一看我的例子。如果你觉得有用的话,可以上网搜索更多信息;并尝试像这样手动回显$v[$timestamp][0],还尝试了$timestamp、$timestamp、$string($timestamp)、strval($timestamp),但不起作用,有什么想法吗?应该可以这样做:
$timestamp=“aaaa”$v[$timestamp]=数组(1,2,3);印刷费($v);回声“你好,我是”$v[$timestamp][0]。问题是您必须保留索引
$timestamp
。如果再次定义$timestamp,您将无法访问它。因此,使用
print\r($v)
检查数组是如何定义的。
$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