PHP построил методы для манипулирования массивом на основе условия

Ниже приведен мой массив, и я хотел проверить условие и эффективно обработать массив. Которые,

  1. Я должен проверить, resourceContext в приведенном ниже массиве 10 или же 11,
  2. Если это 10 Я хотел, чтобы индекс имени массива был заменен на
    быть собственной ценностью.
    от "name" => "Agency FB Bold" в "Agency FB Bold" => "/var/opt/nc/downloads/54007" который fileReferenceценность. Это потому что resourceContextзначение 11,
  3. В случае, если это resourceContext значение 10 затем "Agency FB Bold"значение индекса s должно быть значением pclFontNumber который сделает "Agency FB Bold" => "54007"

$gAllFonts = array("mFontList" => array(array("name" => "Agency FB Bold", "pclFontNumber" => "54007", "fontType" => "0", "fileReference" => "/var/opt/nc/downloads/54007", "resourceContext" => "11"), array("name" => "Albertus Extra Bold", "pclFontNumber" => "53056", "fontType" => "0", "fileReference" => "/var/opt/nc/downloads/53056", "resourceContext" => "10"), array("name" => "Albertus Medium", "pclFontNumber" => "53041", "fontType" => "0", "fileReference" => "/var/opt/nc/downloads/53041", "resourceContext" => "10"), array("name" => "Antique Olive", "pclFontNumber" => "52795", "fontType" => "0", "fileReference" => "/var/opt/nc/downloads/52795", "resourceContext" => "10")));

Как это манипулирование должно быть сделано с использованием встроенных методов PHP?

Я пробовал с array pop а также array previous array next`, но не смог найти правильный путь.

0

Решение

Попробуйте этот фрагмент кода здесь

<?php
ini_set('display_errors', 1);
$result=array();
$gAllFonts = array("mFontList" => array(array("name" => "Agency FB Bold", "pclFontNumber" => "54007", "fontType" => "0", "fileReference" => "/var/opt/nc/downloads/54007", "resourceContext" => "11"), array("name" => "Albertus Extra Bold", "pclFontNumber" => "53056", "fontType" => "0", "fileReference" => "/var/opt/nc/downloads/53056", "resourceContext" => "10"), array("name" => "Albertus Medium", "pclFontNumber" => "53041", "fontType" => "0", "fileReference" => "/var/opt/nc/downloads/53041", "resourceContext" => "10"), array("name" => "Antique Olive", "pclFontNumber" => "52795", "fontType" => "0", "fileReference" => "/var/opt/nc/downloads/52795", "resourceContext" => "10")));
foreach ($gAllFonts["mFontList"] as $key => $value)
{
if ($value["resourceContext"] == 11)
{
$result["mFontList"][][$value["name"]]= $value["fileReference"];
}
elseif ($value["resourceContext"] == 10)
{
$result["mFontList"][][$value["name"]]= $value["pclFontNumber"];
}
}
print_r($result);
1

Другие решения

Ты можешь использовать array_map:

$mapping = [
'10' => 'pclFontNumber',
'11' => 'fileReference'
];

$gAllFonts['mFontList'] = array_map(function ($font) use ($mapping) {
if (isset($mapping[$font['resourceContext']])) {
$font[$font['name']] = $font[$mapping[$font['resourceContext']]];
}

return $font;
}, $gAllFonts['mFontList']);

Обрати внимание на $mapping переменная. Эта техника дает нам возможность избежать использования if а также elseif,

Вот рабочая демо.

Редактировать:

Если вам нужно полностью заменить массивы:

$mapping = [
'10' => 'pclFontNumber',
'11' => 'fileReference'
];

$gAllFonts['mFontList'] = array_map(function ($font) use ($mapping) {
return [
$font['name'] => $font[$mapping[$font['resourceContext']]]
];
}, $gAllFonts['mFontList']);

Вот рабочая демо.

1

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector