Я объединил 2 многомерных массива с той же информацией, но с разными ключами, используя array_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_map()
мне удается изменить все ключи на Title
но я также удалю все значения Title
за исключением ключа Ttitle
я только что изменил на Title
.
Код выглядит следующим образом:
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 ( [0] => Array ( [Title] => lilly [Price] => 1.75 [Number] => 3 ) [1] => Array ( [Title] => [Price] => 1.25 [Number] => 15 ) [2] => Array ( [Title] => [Price] => 0.75 [Number] => 25 ) [3] => Array ( [Title] => [Price] => 2.75 [Number] => 33 ) [4] => Array ( [Title] => [Price] => 1.15 [Number] => 7 ) )
Я не ошибаюсь в использовании этой функции array_map()
? Должен ли я делать что-то другое, кроме этого?
Лучше, но я вышел. С вашим существующим кодом вам нужно установить Ttitle
или Title
которое присутствует:
$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
/ else
, поэтому:
if(isset($complete['Ttitle'])) { $title = $complete['Ttitle']; //if Ttitle is set use it } else { $title = $complete['Title']; //if not use Title }
Вы можете попробовать использовать функцию array_key_exists
:
$completearray = array_map(function($complete) { return array( 'Title' => (array_key_exists('Title', $complete) ? $complete['Title'] : $complete['Ttitle']), 'Price' => $complete['Price'], 'Number' => $complete['Number'], ); }, $completearray);
Или, если вы предпочитаете:
$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);
Если массив $complete
содержит ключ, 'Title'
, он будет использовать это; иначе он будет использовать ключ 'Ttitle'
.