将两个数组合并为一个数组

时间:2020-05-11 12:02:31

标签: php mysql

我有两个数组,$ result和$ social_result。我必须合并两个表。 $ result的social_icons_id与$ social_result的ID相匹配。如果匹配,则显示$ result数组的链接,否则为空白。

我有一个数组

Array
(
[0] => Array
    (
        [social_icons_id] => 14
        [link] => www.instagram.com
        [edittemplate_id] => 218
        [name] => Email
        [image] => email.png
    )

[1] => Array
    (
        [social_icons_id] => 16
        [link] => www.instagram.com
        [edittemplate_id] => 218
        [name] => Blogger
        [image] => blogger.png
    )
 )

另一个是:

Array
(
[0] => Array
    (
        [id] => 13
        [name] => Address
        [image] => address.png
    )

[1] => Array
    (
        [id] => 14
        [name] => Email
        [image] => email.png
    )

[2] => Array
    (
        [id] => 15
        [name] => Fax
        [image] => fax.png
    )

[3] => Array
    (
        [id] => 16
        [name] => Text
        [image] => text.png
    )

[4] => Array
    (
        [id] => 17
        [name] => Website
        [image] => Website.png
    )
 )

现在我必须将两个表合并到一个表中,例如:

Array
(
[0] => 
[1] => www.instagram.com
[2] => 
[3] => 
[4] => 
[5] => www.instagram.com
[6] => 
[7] => 
[8] => 
[9] => 
[10] => 
[11] => 
[12] => 
[13] => 
[14] => 
[15] => 
[16] => 
)
两个表的

id匹配并组成一个表。 我尝试过-

$result = $obj->select_social_ids($id); // for first table

$social_result = $obj->show_social_icons(); // for second table

for($j=0;$j<count($social_result);$j++)
{
 if(in_array($social_result[$j]['id'], $result)) { // search value in the array
    $link[] = $result[$j]['link'];
}
else
{
    $link[] = '';
}
}

但不起作用。

3 个答案:

答案 0 :(得分:1)

根据从何处获取此信息(例如数据库表),在SQL中执行此操作可能更有意义。

也就是说,鉴于您提供的数据和代码,我认为您的in_array()检查不正确,因为它只会检查$result的顶层。您似乎想与'social_icon_id'比较的$social_results[$j]['id']值包含在$result内的嵌套数组中。

您可以执行以下操作:

<?php

$results = $obj->select_social_ids($id);
$results_ids = array_map(
    function ($result) { return $result['id']; },
    $results
);
$results = array_combine($results_ids, $results);

$social_results = $obj->show_social_icons();

foreach ($social_results as $social_result) {
    $id = $social_result['id'];
    if (isset($results[$id])) {
        $link[] = $results[$id]['link'];
    }
    else
    {
        $link[] = '';
    }
}

答案 1 :(得分:0)

如果我正确理解了您的问题,则您希望循环$ social_result并将ID与$ result中的那些键进行比较,也许这样的方法会起作用。

$link = array();

foreach($social_result as $social){

    $key = array_search($social['id'], array_column($result, 'social_icons_id'));

    if($key != ''){
          $link[] = $result[$key]['link'];
    }else{
          $link[] = '';
    }

}

我测试了这段代码,它可以做我认为您要完成的事情

$a = array('social_icons_id' => '14','link' => 'www.instagram14.com','edittemplate_id' => '218','name' => 'Email','image' => 'email.png');
$b = array('social_icons_id' => '16','link' => 'www.instagram16.com','edittemplate_id' => '218','name' => 'Blogger','image' => 'blogger.png');

$result = array($a,$b);


$social_result = array(array('id'=>'14','name'=>'address0','image'=>'adress.png'),array('id'=>'15','name'=>'address1','image'=>'adress.png'), array('id'=>'16','name'=>'address2','image'=>'adress.png'),array('id'=>'17','name'=>'address3','image'=>'adress.png'),array('id'=>'18','name'=>'address4','image'=>'adress.png'),array('id'=>'19','name'=>'address5','image'=>'adress.png'));

$link = array();

foreach($social_result as $social){

$key = array_search($social['id'], array_column($result, 'social_icons_id'));

echo "<p> k ".$key;

if($key != ''){
      $link[] = $result[$key]['link'];
}else{
      $link[] = '';
}

}

print_r($link);

答案 2 :(得分:0)

只需创建一个简单的左联接查询即可生成一个包含社交图像链接的平面数组。

select social_image.link
from social_icons
left join social_image
    on social_icons.id = social_image.social_icons_id
order by social_icons.id

但是要小心使用php上的数组大小限制,因此需要适当的结果限制。

select social_image.link
from social_icons
left join social_image
    on social_icons.id = social_image.social_icons_id
order by social_icons.id
limit 1000

希望这会有所帮助。