检索用于php的数组/子数组名称

时间:2011-10-10 18:24:32

标签: php multidimensional-array

我有一个多维数据库数组,它是从我的服务器生成的:

// place db tables into array
$da_db = array(
'test' => array(
    // test.users
    'users' => array('fname','lname','info'),
    // test.webref_rss_details
    'webref_rss_details' => array('id','title','link','description','language','image_title','image_link','item_desc','image_width','image_height','image_url','man_Edit','webmaster','copyright','pubDate','lastBuild','category','generator','docs','cloud','ttl','rating','textInput','skipHours','skipDays'),
    // test.webref_rss_items
    'webref_rss_items' => array('id','title','description','link','guid','pubDate','author','category','comments','enclosure','source','chan_id')
),
'db_danaldo' => array(
    //code here
),
'frontacc' => array(
    //code here
)

[阵列] [分贝] [表] [字段]

正如您所看到的,当前填充的数据库是指我正在处理的RSS项目 - 一个用于频道的表,另一个用于该频道中的项目,此刻是另一个问题(目前用户表不是重要)..

我想要做的是返回数组/子数组名称并将每个名称转换为变量以用作SQL查询中字符串的一部分,还需要我需要连接的表的别名:

(e.g. SELECT * FROM 'webref_rss_items' WHERE 'chan_id' = 'test.webref_rss_details.id')

其中'webref_rss_items'是一个变量,'chan_id'是一个变量,'test.webref_rss_details.id'是串联字符串中的3个变量,虽然我听说SQL查询中的连接不是好的做法,安全性-wise ...奇怪的是所有这些价值观,我所能追溯的是最深层次的'id':

echo "{$da_db['test']['webref_rss_details'][0]}"

但是当我尝试访问名称时,返回'Array'或数组的最后一个值!

这样做的原因是带有查询的PHP文件将位于服务器的“公共”部分内,并且希望使用的变量与原始名称没有内涵,也似乎更方便因为变量可以互换,所以我不会一直使用相同的路径。

编辑:我的想法是从['db']['field']获取关键名称。我最接近的是在array_fill循环中迭代密钥和foreach,在另一个range()foreach内使用array_combine然后var_dump组合数组如此:

foreach($da_db['test'] as $key1 => $val) { //put key-names into array1 to use as values
$a = array();
$a = array_fill(0, 1, $key1);
print($key1.'<br />');
}   

foreach (range(0, 2) as $number) {         //array for numbers to use as keys
$b = array();
$b = array_fill(0, 1, $number);
    echo $number.'<br />';
}

$c = array_combine($b, $a);                //combine both for new array
print_r($c.'<br />');

我可以使用array_slice来获取我想要的名字! (啰嗦?) 问题是这个结果只显示了最后key => value;根据命令(print_r,print,echo),它显示:

[2] => webref_rss_items 

OR     阵列。

我希望现在已经足够了。

我在这里看到过类似的问题,但通常适用于一个值,或一个数组的一个级别,但如果您之前看过这个问题,请告诉我并指出正确的方向。

1 个答案:

答案 0 :(得分:0)

您的两个顶级数组(数据库名称和表名称)是“命名密钥”数组。字段级数组(表名数组的值)是“整数键”数组。 PHP会自动为仅使用值定义的数组添加数字索引。对于“命名密钥”数组,只能使用您定义的密钥名称来访问它们的值。

例如:

$array1 = array('zero', 'one', 'two');
echo $array1[2]; // two

$array2 = array('zero' => 'this is zero', 'one' => 'this is one');
echo $array2['zero']; // this is zero
echo $array2[0]; // undefined

PHP提供了一个名为array_keys()的函数,它将返回一个包含所有键名的整数索引数组。所以你使用整数值访问表数组,你可以这样做。

$da_db_test_keys = array_keys($da_db['test']);
echo $da_db_test_keys[1];

也许这会对你有所帮助。我不是100%关于你如何计划访问数组中的值,所以如果你有任何其他问题,请尝试澄清那部分。