【问题标题】:I Need to Simplify an array from an inner join an array php我需要从内部连接数组 php 简化数组
【发布时间】:2021-10-15 22:58:50
【问题描述】:

我有一个来自 2 个 Mysql 表的内部连接语句的数组...我需要它们以更好的工作格式用于前端显示:

mysql查询:

SELECT weddings.id, weddings.wImage, images.iLink FROM images INNER JOIN weddings ON weddings.id = images.weddingId

结果:

Array
(
    [0] => Array
        (
            [id] => 3
            [wImage] => image1.jpg
            [iLink] => image2.jpg
        )

    [1] => Array
        (
            [id] => 3
            [wImage] => image1.jpg
            [iLink] => image3.jpg
        )

    [2] => Array
        (
            [id] => 3
            [wImage] => image1.jpg
            [iLink] => image4.jpg
        )

    [3] => Array
        (
            [id] => 10
            [wImage] => image11.jpg
            [iLink] => image5.jpg
        )

    [4] => Array
        (
            [id] => 10
            [wImage] => image11.jpg
            [iLink] => image6.jpg
        )

    [5] => Array
        (
            [id] => 10
            [wImage] => image11.jpg
            [iLink] => image7.jpg
        )

    [6] => Array
        (
            [id] => 11
            [wImage] => image12.jpg
            [iLink] => image8.jpg
        )

    [7] => Array
        (
            [id] => 11
            [wImage] => image12.jpg
            [iLink] => image9.jpg
        )

    [8] => Array
        (
            [id] => 11
            [wImage] => image12.jpg
            [iLink] => image10.jpg
        )

)

所以我需要进一步处理这个数组以获得预期的结果:

Array
(
    [0] => Array
        (
            [id] => 3
            [wImage] => image1.jpg
            [iLink] => Array
               (
                [image] => image2.jpg
                [image] => image3.jpg
                [image] => image4.jpg
               )
        )

    [1] => Array
        (
            [id] => 10
            [wImage] => image11.jpg
            [iLink] => Array
               (
                [image] => image5.jpg
                [image] => image6.jpg
                [image] => image7.jpg
               )
        )

    [2] => Array
        (
            [id] => 10
            [wImage] => image12.jpg
            [iLink] => Array
               (
                [image] => image8.jpg
                [image] => image9.jpg
                [image] => image10.jpg
               )
        )
)

【问题讨论】:

  • 不完全是一个解决方案,但一行代码可以让你非常接近:$data = $pdo->query($query)->fetchAll(PDO::FETCH_GROUP | PDO::FETCH_ASSOC);

标签: php mysql multidimensional-array


【解决方案1】:

有很多方法,但假设您的id 是唯一的(我猜),您可以使用此id 作为输出中的关联键,因此您可以轻松确定它是否已经存在。在最后一步中,您重新索引结果数组。更多解释见代码 cmets。

// $input_array is the outcome from sql 
// $output_array will store the desired outcome
$output_array=[];
// loop through every item in input array
foreach ($input_array as $input_item) {
    // if key with "id" already exists in output array
    if (array_key_exists($input_item["id"], $output_array)) {
        // append image to already existing "iLink" array
        array_push($output_array[$input_item["id"]]["iLink"], 
            ["image" => $input_item["iLink"]]
        );
    }
    // if key with id not exists yet in output array
    else {
        // add current input item to output array,
        // with "id" value as key 
        $output_array[$input_item["id"]] = [
            "id" => $input_item["id"],
            "wImage" => $input_item["wImage"],
            // array with first image, can be appended later
            "iLink" =>["image" => $input_item["iLink"]]
        ];
    }
}
// now we have the result, but output array keys are not 0,1,2
// but the id values (3, 10 etc.), so we have to reindex
$output_array = array_values($output_array);
// now it is ready
var_dump($output_array);

【讨论】:

  • 像梦一样工作只需要改变 1 件事 "iLink" =>[["image" => $input_item["iLink"]]] 和繁荣.. 伟大的工作,非常感谢.
猜你喜欢
  • 2020-02-09
  • 1970-01-01
  • 2015-08-25
  • 2021-10-31
  • 1970-01-01
  • 2014-05-15
  • 2011-10-25
  • 2018-05-19
  • 1970-01-01
相关资源
最近更新 更多