PHP合并2数组在单个数组中

时间:2012-02-22 10:23:03

标签: php arrays multidimensional-array

所有

在我看来,我需要根据Tag缩短图像。 现在在第一个数组中有图像标记,第二个是url。

  1. $ results_tag array

    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

     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
            )
    )
    
  3. 现在,我真正想要的是

    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 个答案:

答案 0 :(得分:3)

我假设元素的数量已知为$ N。

$results = array();
for ( $i = 0; $i < $N; ++$i ) $results[$results_tag[$i]->meta_value] = $results_url[$i]->meta_value;

答案 1 :(得分:2)

这样做。

$result = array();
$len = count($results_tag);
while($len--) $result[$results_tag[$i]->meta_value] = $results_url[$i]->meta_value;

答案 2 :(得分:2)

 <?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 "</pre>";
  exit;

欢呼声

答案 3 :(得分:1)

据我所知,没有内置函数可以根据一个属性将两个对象数组转换为一个关联数组。

假设你有数组键之间的对应关系,你可以实现这样的东西:

$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;
    }
}

答案 4 :(得分:1)

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);