簡體   English   中英

將兩個數組合並為一個數組

[英]merge two array in one array

我有兩個數組,$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[] = '';
}
}

但不工作。

根據您從何處獲取此信息(例如數據庫表),在 SQL 中執行此操作可能更有意義。

也就是說,鑒於您提供的數據和代碼,我認為您的in_array()檢查不正確,因為它只會檢查$result的頂層。 您似乎想要與$social_results[$j]['id']進行比較的'social_icon_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[] = '';
    }
}

如果我正確理解了你的問題,你想通過 $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);

您只需創建一個簡單的左連接查詢來生成包含社交圖像鏈接的平面數組。

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

希望這可以幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM