[英]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.