Intereting Posts
XPath и PHP: анализ из n-го экземпляра элемента Почему я не могу передавать пользовательские сеансы между субдоменами? CakePHP 1.3: высокое использование ЦП PHP, Ассоциативные массивы с сеансами Я хочу использовать несколько функций select2 onchange динамически Примечание. Неопределенная переменная: captcha в C: \ wamp \ projects \ ServiceAdmin \ login \ loginauth.php в строке 11 Предотвращение одновременных сеансов пользователя в Symfony2 Как отключить уведомление и предупреждение в PHP в файле .htaccess? Codeigniter – Объект класса __PHP_Incomplete_Class не может быть преобразован в строку captcha работает отлично в localhost, но не на моем хостинге Как возобновить встроенное видео YouTube? Cakephp 3 перенаправляет в beforeFilter родительского класса PHP – соединение MySQL не работает: 2002 Нет такого файла или каталога Почему файл может быть частично загружен? Форма PHP $ _POST истекает, если страница перезагружена

Изменение ключей с помощью array_map на многомерных массивах с использованием PHP

Я объединил 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() ? Должен ли я делать что-то другое, кроме этого?

Related of "Изменение ключей с помощью array_map на многомерных массивах с использованием PHP"

Лучше, но я вышел. С вашим существующим кодом вам нужно установить 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' .