使用PHP在多维数组上使用数组映射更改键

使用PHP在多维数组上使用数组映射更改键,php,arrays,multidimensional-array,key,Php,Arrays,Multidimensional Array,Key,我使用array\u merge()合并了两个具有相同信息但具有不同键的多维数组,并得到了输出: Array ( [0] => Array ( [Ttitle] => lilly [Price] => 1.75 [Number] => 3 ) [1] => Array ( [Title] => rose [Price] =>

我使用
array\u merge()
合并了两个具有相同信息但具有不同键的多维数组,并得到了输出:

   Array
   (
    [0] => Array
    (
        [Ttitle] => lilly
        [Price] => 1.75
        [Number] => 3
    )
    [1] => Array
    (
        [Title] => rose
        [Price] => 1.25
        [Number] => 15
    )
    [2] => Array
    (
        [Title] => daisy
        [Price] => 0.75
        [Number] => 25
    )
    [3] => Array
    (
        [Title] => nettle
        [Price] => 2.75
        [Number] => 33
    )
    [4] => Array
    (
        [Title] => orchid
        [Price] => 1.15
        [Number] => 7
    )
  )
如您所见,数组中的第一个键名是
Ttitle
,其余的键名是
Title
。我现在想要的是将所有
Ttitle
键(仅当前一个)更改为
Title
(与所有其他键一样)。当我使用
array\u map()
函数时,我设法将所有键更改为
Title
,但我也删除了所有
Title
值,除了刚刚更改为
Title
Ttitle

代码如下:

   if(! empty($notmatchingarray))
   {
    $completearray = array_merge($notmatchingarray, $datastuff2);

    $completearray = array_map(function($complete) {
        return array(
           'Title' => $complete['Ttitle'],
           'Price' => $complete['Price'],
           'Number' => $complete['Number'],
       );
}, $completearray);

echo "Array which includes each unique enrty from both arrays";
echo "<pre>";
print_r($completearray);
echo "</pre>";
echo "<br/>";
   }
我使用这个
array\u map()
函数是不是做错了?我应该做些别的事情吗

您可以尝试使用以下函数:

$completearray = array_map(function($complete) {
    $titleKey = array_key_exists('Title', $complete) ? 'Title' : 'Ttitle';
    return array(
       'Title' => $complete[$titleKey],
       'Price' => $complete['Price'],
       'Number' => $complete['Number'],
   );
}, $completearray);
或者,如果您愿意:

$completearray = array_map(function($complete) {
        $title = isset($complete['Ttitle']) ? $complete['Ttitle'] : $complete['Title'];
        return array(
           'Title' => $title,
           'Price' => $complete['Price'],
           'Number' => $complete['Number'],
       );
}, $completearray);

如果数组
$complete
包含键
'Title'
,它将使用该键;否则它将使用键
'Ttitle'

更好的方式,但我要走了。使用现有代码,您需要设置
Ttitle
Title
,以存在的为准:

if(isset($complete['Ttitle'])) {
    $title = $complete['Ttitle']; //if Ttitle is set use it
} else {
    $title = $complete['Title'];  //if not use Title
}
是简单的
if
/
else
的快捷方式,因此:


@迈克,怎么了?没用?你有错误吗?我在最初的回答中遇到了一个问题(
在数组中,而不是
数组中,密钥存在),但我已经纠正了这个问题。请看我最新的答案。啊,它现在起作用了,我必须跳枪了。帮了大忙,谢谢!如果多维数组有更多不同的键名,我可以在理论上对此进行扩展以将所有键更改为特定名称吗?@Mike-Sure。您可以非常轻松地调整第二个示例。您甚至可以创建一个键数组,然后只选择找到的第一个键。无论您想以何种方式执行,请找到正确的键并将其分配给
$titleKey
。您的回报声明将保持不变。再次感谢您的帮助,立即生效。$title变量基本上是说如果$complete中的键是Ttitle,那么就用$complete['title']交换$complete['Ttitle']。如果所有的键都有不同的名称,但值相似,那么我可以使用相同的原则来更改所有的键吗?@Mike不,它不会交换值
?:
是条件运算符(也称为条件运算符)。它基本上是if/else语句的紧凑版本。
$completearray = array_map(function($complete) {
        $title = isset($complete['Ttitle']) ? $complete['Ttitle'] : $complete['Title'];
        return array(
           'Title' => $title,
           'Price' => $complete['Price'],
           'Number' => $complete['Number'],
       );
}, $completearray);
if(isset($complete['Ttitle'])) {
    $title = $complete['Ttitle']; //if Ttitle is set use it
} else {
    $title = $complete['Title'];  //if not use Title
}