Получение имени массива / подмассива для использования в php - PullRequest
1 голос
/ 10 октября 2011

У меня есть многомерный массив баз данных, который был сгенерирован с моего сервера:

// 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 не является хорошей практикой, безопасность в противном случае ... странная вещь всех этих значений, все, что я могу восстановить, это самый глубокий уровень, '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 голосов
/ 10 октября 2011

Ваши два массива верхнего уровня (имя базы данных и имя таблицы) являются массивами с именем-ключом.Массив уровня поля (значение массива имени таблицы) является массивом целочисленного ключа.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% уверен, как вы планировали доступ к значениям в своих массивах, поэтому, если у вас есть еще вопросы, попробуйте уточнить эту часть.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...