Сохранение элементов в многомерном массиве - PullRequest
2 голосов
/ 09 июля 2011

Я создаю программу, которая анализирует веб-сайт и хранит ссылки и изображения, я храню их в отдельных массивах, один массив для ссылок, один для изображений и т. Д. Я хочу сохранить его в одном многомерном массиве.. как мне это сделать ?У меня есть три функции, которые возвращают массив идентификаторов, содержащий идентификаторы из темы, которую я храню, другую функцию, которая возвращает массив заголовков из тем, которые я сохраняю, и другую функцию, которая возвращает массив со всеми ссылками на изображения ... так что мой«Основная» функция:

$array_id = getIds();
$array_titles = getTitles($array_id);
$array_images = getImages($array_id);

Я хочу сохранить ее в таком виде, который при вызове будет выглядеть следующим образом:

$ array [$ id] [$ images]

Я получаю все изображения по этой теме, или, если я позвоню

$ array [$ id] [$ title]

Я получуназвание этой темы ID, это возможно?или это лучший способ сделать это?Я новичок в php, я бы создал структуру, если бы использовал C, поэтому я не знаю, есть ли что-нибудь эквивалентное ей на php, большое спасибо ..

Ответы [ 2 ]

1 голос
/ 09 июля 2011

Вместо функций, возвращающих массивы всех заголовков и всех изображений, вам потребуются функции, которые возвращают только заголовки или изображения, связанные с одним идентификатором. Мы не видим, как вы определяете свои функции.

//Get all your ids
$array_id = getIds();

// Functions take an id and retrieve only its related objects
function getTitles($id) {}
function getImages($id) {}

//Iterate over the ids,  and retrieve the titles and images for each
foreach ($array_id as $id)
{
  // getTitles returns an array, keyed as 'titles' in the id array
  $id['titles'] = getTitles($id);

  // getImages returns an array, keyed as 'images' in the id array
  $id['images'] = getImages($id);
}

// Now you can retrieve them like so:
// A single title...
echo $array_id[0]['titles'][0];
// All titles
print_r($array_id[0]['titles'];

Структура вашего результирующего массива выглядит примерно так:

Array
(
    [0] => Array
        (
            [titles] => Array
                (
                    [0] => title 0a
                    [1] => title 0b
                    [2] => title 0c
                )    
            [images] => Array
                (
                    [0] => img0a.jpg
                    [1] => img0b.jpg
                )    
        )    
    [1] => Array
        (
            [titles] => Array
                (
                    [0] => title 1a
                    [1] => title 1b
                    [2] => title 1c
                )    
            [images] => Array
                (
                    [0] => img1a.jpg
                    [1] => img1b.jpg
                )    
        )    
    [2] => Array
        (
            [titles] => Array
                (
                    [0] => title 2a
                    [1] => title 2b
                    [2] => title 2c
                )    
            [images] => Array
                (
                    [0] => img2a.jpg
                    [1] => img2b.jpg
                )    
        )    
)

Если вам это поможет, вот что я использовал для создания макета массива с помощью интерактивного интерпретатора php -a:

php > $ids = array();
php > $ids[0] = array('titles'=>array('title 1', 'title 2', 'title 3'), 'images'=>array('img1.jpg', 'img2.jpg'));
php > $ids[1] = array('titles'=>array('title 1a', 'title 1b', 'title 1c'), 'images'=>array('img1a.jpg', 'img1b.jpg'));
php > $ids[2] = array('titles'=>array('title 2a', 'title 2b', 'title 2c'), 'images'=>array('img2a.jpg', 'img2b.jpg'));
php > $ids[0] = array('titles'=>array('title 0a', 'title 0b', 'title 0c'), 'images'=>array('img0a.jpg', 'img0b.jpg'));
php > print_r($ids);
0 голосов
/ 09 июля 2011

Возможно, вы захотите рассмотреть PHP-класс в качестве альтернативы, поскольку struct в значительной степени является классом с открытыми членами-данными по умолчанию, может быть что-то в такой форме:

 class arrayInfo {
     public var id;
     public var title;
     public var image;
}

Затем вы можете использовать их в массиве:

$cur_array = array();
$cur_array[0] = new arrayInfo();
$cur_array[1] = new arrayInfo();

.. что-то в этом роде. Надеюсь, это поможет.

...