2013-05-01 4 views
0

I Выберите * С моей таблицы SQL в PHP, и я преобразовать его в формат JSON, так что результаты так:Вставка значения в массив

([ 
    {"id":"350","Name":"BlaBla","Info":"BlaBla"}, 
    {"id":"351","Name":"BlaBla","Info":"BlaBla"}, 
    {"id":"352","Name":"BlaBla","Info":"BlaBla"} 
]); 

Я скрести сайт клиентов для изображений (это запрос клиента) на основе идентификатора в вышеуказанных записей и вывода I изображения в аналогичный массив/словаря и вывода в формате JSON:

([ 
    {"image1":"http://Sourceofimg.jpg"}, 
    {"image2":"http://Sourceofimg.jpg"}, 
    {"image3":"http://Sourceofimg.jpg"}, 
    {"image4":"http://Sourceofimg.jpg"}, 
    {"image5":"http://Sourceofimg.jpg"} 
]); 

Так позволяет сказать, что я скрести страницу, page.php?id=350, я получаю аналогичный вывод в массив изображений выше, как я могу добавить/добавить этот результат в первый массив, где id=350?

EDIT

Здесь я хотел бы объединить массивы:

while ($row = mysql_fetch_assoc($results)) 
        { 
    $rows[] = $row; 
    $url = 'http://www.url.com/page.php?id='.$row['id'].''; 
    $html = file_get_html($url); 
    foreach($html->find('div.classvalue') as $element){ 
    foreach($element->find('img') as $img){ 

     $images[] = array("image".$i."" => $img->src); 
     $i = $i + 1; 
     $rows = array_merge($rows, $images); 

} } } 

Моя версия явно не работает, это, кажется, добавления новых изображений в уже существующий образ [] поэтому последний элемент $ rows [] получит полный список изображений, где я просто хочу, чтобы изображения были связаны с этим id. также путем слияния, не сливаться правильно ли я получить выход, как этот, например:

([ 
    {"id":"350","Name":"BlaBla","Info":"BlaBla"}, 
    {"image1":"http://Sourceofimg.jpg"}, 
    {"image2":"http://Sourceofimg.jpg"}, 
    {"id":"351","Name":"BlaBla","Info":"BlaBla"} 
]); 

Я хотел бы он хотел:

([ 
    {"id":"350","Name":"BlaBla","Info":"BlaBla", "image1":"http://Sourceofimg.jpg", "image2":"http://Sourceofimg.jpg"} etc... 
]); 
+1

не делайте это до строки json. сделайте это в любой структуре, которую вы использовали для СОЗДАНИЯ json - например. не конвертируйте в json, пока не закончите. оставайтесь с родными php-массивами/объектами до самого начала. –

+0

Это то, что я делаю, преобразование в JSON - это последняя строка моего файла. Я пытаюсь сделать это в то время ($ row = mysql_fetch_assoc ($ results)) {}. $ rows [] - это мои данные таблицы $ images [] - это мои изображения (очевидно), когда я передаю запрос вручную. Это нормально, но в этом цикле неверно – MikeJ

+0

где закрывается '}' для первого цикла? – rednaw

ответ

1

Я думаю, что это то, что вам нужно. Сначала вам нужно начать с чистого массива $images, используя $images = array();, чтобы у вас не было результатов предыдущих циклов в вашем массиве. Затем вы должны собрать изображения внутри массива $images (используя forloops). Затем вы можете сохранить изображения в массиве $row под ключом 'images', используя $row['images'] = $images;.

Надеюсь, это то, что вам нужно.

while ($row = mysql_fetch_assoc($results)) { 

    $url = 'http://www.url.com/page.php?id='.$row['id'].''; 
    $html = file_get_html($url); 
    $images = array(); 
    $i = 0; 

    foreach($html->find('div.classvalue') as $element){ 

     foreach($element->find('img') as $img){ 
      $row["image".$i] = $img->src;  
      $i = $i + 1;  
     } 

    } 

    $rows[] = $row; 

} 
+0

Теперь действительно близко, требуется еще 1 исправление. Результаты, которые я получаю сейчас: '([{" id ": 350", "Name": "BlaBla", "Info": "BlaBla", "images": {[{image1 ":" imgsource " }]}) Возможно ли, чтобы изображения были сохранены в словаре записей? – MikeJ

+0

Я изменил код. Обратите внимание, что теперь я добавил '$ i = 0;', в противном случае счетчик для ваших изображений не будет сброшен для каждого строка – rednaw

+0

Вы - гений! :) Спасибо за помощь – MikeJ

0

На стороне PHP использование array_merge() с обоих массивов , Кроме того, array_unique станет удобным (он удалит дубликаты).

+0

Это просто слияние обоих, я хочу добавить результаты массива изображений в определенную строку в первом массиве. – MikeJ

0

Вы должны добавить $images в фактическую строку. Что вы делаете, это изменение размера массива.

$actualIndex = count($rows); 
$rows[] = $row; 
... 
... 
$rows[$actualIndex] = $images; 

Или что-то вроде этого

Вы можете настроить $rows[$actualIndex], чтобы удовлетворить вашу структуру. Первый набор где-то $imageID = 1;

$rows[$actualIndex]['image'.$imageID] = $images['url'] 
imageID++; 
+0

Пробовал это, но не совсем там, результаты, которые я получаю: '({" 0 ": {" id ": 350," Name ":" BlaBla "," Info ":" BlaBla "}," 17 ": [{" image1 ":" http: //Sourceofimg.jpg "}]});' – MikeJ

Смежные вопросы