PHP Marge 2 Array в одном массиве - PullRequest
0 голосов
/ 22 февраля 2012

все

В моем приложении мне нужны короткие изображения на основе тегов. Теперь в первом массиве есть тег image, а во втором - url.

  1. массив массивов результатов

    Array
    (
        [0] => stdClass Object
        (
            [meta_value] => Tag 2
        )        
    )
    Array
    (
        [0] => stdClass Object
        (
            [meta_value] => Tag 1
        )
    
        [1] => stdClass Object
        (
            [meta_value] => Tag 3
        )  
    )
    
  2. массив results_url

     Array
        (
            [0] => stdClass Object
                (
                    [meta_value] => formidable/madness_beach.jpg
                )
    
        )
        Array
        (
            [0] => stdClass Object
            (
                [meta_value] => formidable/adfish_beachchair1.jpg
            )
    
            [1] => stdClass Object
            (
                [meta_value] => formidable/madness_boat1.jpg
            )
    )
    

Теперь, что я на самом деле хочу, это

Array
(
[Tag 2] => [formidable/madness_beach.jpg]
[Tag 1] => [formidable/adfish_beachchair1.jpg]
[Tag 3] => [formidable/madness_boat1.jpg]
)

Итак, используя это, я могу создать короткое изображение на основе тега.

Я пытался

$results_tag = array_merge_recursive($results_tag,$results_url);

Но не получаю вывод, как я хочу.

Заранее спасибо !!

Ответы [ 5 ]

3 голосов
/ 22 февраля 2012

Я предполагаю, что число элементов известно как $ N.

$results = array();
for ( $i = 0; $i < $N; ++$i ) $results[$results_tag[$i]->meta_value] = $results_url[$i]->meta_value;
2 голосов
/ 22 февраля 2012
<code> <?php 

  $results_tag_one =  array(0 => array('meta_value' => 'Tag 2'));
  $results_tag_two =  array(0 => array('meta_value' => 'Tag 1'),1 => array('meta_value' => 'Tag 3'));
  $results_tag = array_merge($results_tag_one,$results_tag_two);

  $results_url_one =  array(0 => array('meta_value' => 'formidable/madness_beach.jpg'));
  $results_url_two =  array(0 => array('meta_value' => 'formidable/adfish_beachchair1.jpg'),1 => array('meta_value' => 'formidable/madness_boat1.jpg'));
  $results_url = array_merge($results_url_one,$results_url_two);

  $final = array();
  $i = 0;
  foreach ($results_url as $url_data){
    $final[$results_tag[$i]['meta_value']] = $results_url[$i]['meta_value'];
    $i++;
  }
  echo "<pre>";
  print_r($final);
  echo "
"; выход;

ура

2 голосов
/ 22 февраля 2012

Это подойдет.

$result = array();
$len = count($results_tag);
while($len--) $result[$results_tag[$i]->meta_value] = $results_url[$i]->meta_value;
1 голос
/ 22 февраля 2012
function flatten($tags, $urls, &$result) {
  if (is_array($tags))
    while (sizeof($tags)>0) {
      $tagschld=array_shift($tags);
      $urlschld=array_shift($urls);
      flatten($tagschld, $urlschld, $result);
    }
  else $result[$tags->meta_value]=$urls->meta_value;
}

$result=array();
flatten($results_tag, $results_url, $result);
print_r($result);
1 голос
/ 22 февраля 2012

Насколько я знаю, нет встроенной функции, которая преобразует два массива объектов в один ассоциативный массив, основанный на одном свойстве.

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

$results = array();
foreach($results_tag as $i => $item)
{
    if(is_array($item){
       foreach($item as $j => $value) {
          $results[$value->meta_value] = $results_url[$i][$j]->meta_value;
       }
    } else {
       $results[$value->meta_value] = $results_url[$i]->meta_value;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...