繁体   English   中英

array_merge 用键值结构覆盖数组

[英]array_merge overwrite array with key-value structure

我得到了这个名为$records的数组:

Array
(
    [0] => Array
        (
            [id] => 14
            [name] => name1
            [publisher] => Dieter
            [date] => 2022-07-29
            [text] => blablablablablablablablablabblablablablablablablablablablablablablablabla
        )

    [1] => Array
        (
            [id] => 16
            [name] => name2
            [publisher] => Dieter
            [date] => 2022-07-28
            [text] => awhduawohduawohduawhduawuhdawhduaiwd
        )
    [2] => Array
        (
            [id] => 17
            [name] => name3
            [publisher] => Dieter
            [date] => 2022-07-30
            [text] => blub
        )
    [3] => Array
        (
            [id] => 18
            [name] => name4
            [publisher] => Dieter
            [date] => 2022-07-31
            [text] => awdawdw
        )
)

然后我想通过它们的 id 过滤它们( $ids=[14,16] ):

$articles = array();
foreach ($records as $article) {
    if (in_array($article['id'], $ids)) { //alg select only one article
        $articles = array_merge($articles, $article);
    }
}
    return $articles;

Output 应该如下所示:

Array
(
    [0] => Array
        (
            [id] => 14
            [name] => name1
            [publisher] => Dieter
            [date] => 2022-07-29
            [text] => blablablablablablablablablabblablablablablablablablablablablablablablabla
        )

    [1] => Array
        (
            [id] => 16
            [name] => name2
            [publisher] => Dieter
            [date] => 2022-07-28
            [text] => awhduawohduawohduawhduawuhdawhduaiwd
        )
)

但我得到了这个:

Array
(
       [id] => 16
       [name] => name2
       [publisher] => Dieter
       [date] => 2022-07-28
       [text] => awhduawohduawohduawhduawuhdawhduaiwd
)

这个命令不起作用,因为我得到了一个不同的结构:

array_merge_recursiv() 
$articles = array();
foreach ($records as $article) {
    if (in_array($article['id'], $ids)) { //alg select only one article
        $articles[] =  $article;
    }
}
    return $articles;

此处不需要array_merge ,您可以使用$articles[]在表中推送新条目。

您还可以像这样保留原始表的键:

$articles = array();
foreach ($records as $key => $article) {
    if (in_array($article['id'], $ids)) { //alg select only one article
        $articles[$key] =  $article;
    }
}
    return $articles;
function array_diff_column_values($rawArray, $searchArray, $columnName = 'id') {
    $result = [];

    foreach($rawArray as $key => $value) {
        if (isset($value[$columnName]) && in_array($value[$columnName], $searchArray)) {
            $result[] = $value;
        }
    }

    return $result;
}

echo "<pre>";
print_r(array_diff_column_values($records, [14,16]));
echo "</pre>";

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM