php Как сопоставить два массива по id роли и актера и вывести имена
Имеется два массива Актеры и роли У ролей хранятся id актеров которые их играют Вот как получаю их id:
<?php $prsns_titles = []; ?>
<?php $mdls = $this->_models ?>
<?php $roles = current($mdls)->_elements ?>
<?php $prsns = current($mdls)->_persons?>
<!-- roles -->
<?php
foreach ($roles as $role) {
var_dump("<pre>", $role->number,"</pre>");
}
?>
<!-- persons -->
<?php
foreach ($prsns as $person) {
var_dump("<pre>", $person->id,"</pre>");
}
?>
Выводится вот это:
string(5) "
"
string(10) "{"0":"79"}"
string(6) "
" string(5) "
"
string(10) "{"0":"56"}"
string(6) "
" string(5) "
"
string(10) "{"0":"21"}"
string(6) "
" string(5) "
"
string(10) "{"0":"18"}"
string(6) "
" string(5) "
"
string(10) "{"0":"29"}"
string(6) "
" string(5) "
"
string(9) "{"0":"2"}"
string(6) "
" string(5) "
"
string(10) "{"0":"20"}"
string(6) "
" string(5) "
"
string(9) "{"0":"9"}"
string(6) "
" string(5) "
"
string(19) "{"0":"51","1":"88"}"
string(6) "
" string(5) "
"
string(9) "{"0":"8"}"
string(6) "
" string(5) "
"
string(19) "{"0":"74","1":"76"}"
string(6) "
" -----------Отсюда выводятся уже id актера---------- string(5) "
"
string(1) "9"
string(6) "
" string(5) "
"
string(2) "29"
string(6) "
" string(5) "
"
string(2) "21"
string(6) "
" string(5) "
"
string(2) "20"
string(6) "
" string(5) "
"
string(2) "18"
string(6) "
" string(5) "
"
string(1) "2"
string(6) "
" string(5) "
"
string(1) "8"
string(6) "
" string(5) "
"
string(2) "51"
string(6) "
" string(5) "
"
string(2) "56"
string(6) "
" string(5) "
"
string(2) "74"
string(6) "
" string(5) "
"
string(2) "88"
string(6) "
"
Пример вывода роли:
[1]=>
object(stdClass)#212 (14) {
["id"]=>
string(3) "575"
["entry"]=>
string(3) "128"
["number"]=>
string(10) "{"0":"56"}"
["title"]=>
string(14) "УЧИТЕЛЬ"
["tone"]=>
string(0) ""
["tone_image"]=>
NULL
["volume"]=>
string(0) ""
["price"]=>
string(0) ""
["state"]=>
string(1) "1"
["checked_out"]=>
string(2) "42"
["checked_out_time"]=>
string(19) "2021-03-15 21:27:55"
["ordering"]=>
string(3) "575"
["featured"]=>
string(1) "0"
["params"]=>
object(JRegistry)#200 (1) {
["data":protected]=>
object(stdClass)#198 (0) {
}
}
}
Пример вывода актера:
array(11) {
[0]=>
object(stdClass)#239 (19) {
["id"]=>
string(1) "9"
["eid"]=>
string(0) ""
["cid"]=>
string(1) "0"
["tid"]=>
string(1) "2"
["title"]=>
string(45) "Александр Жук"
["alias"]=>
string(23) "aleksandr-zuk"
["thumb"]=>
string(48) "images/persons/thumbs/AleksandrZuk.jpg"
["icon"]=>
string(47) "images/persons/icons/AleksandrZuk.jpg"
["images"]=>
string(0) ""
["info"]=>
string(0) ""
["description"]=>
string(312) ""
["state"]=>
string(1) "1"
["checked_out"]=>
string(1) "0"
["checked_out_time"]=>
string(19) "0000-00-00 00:00:00"
["ordering"]=>
string(2) "12"
["featured"]=>
string(1) "0"
["params"]=>
string(92) "{"show_icon":"1","show_link":"1","title_suffix":"","sex":"0","link_to":"","link_to_text":""}"
["slug"]=>
string(25) "9:aleksandr-zuk"
["link"]=>
string(47) "/lyudi-teatra/artisty/9-aleksandr-zuk"
}
Как можно вывести Имя актера и рядом его роль?
Ответы (1 шт):
Автор решения: Senior Full stack
→ Ссылка
Тут все просто, необходимо обойти массив Ролей и составить карту данных Актеров и их Ролей, а во время вывода Актеров уже по этой карте выводить названия ролей.
<?php
$roles = [
(object) [
'number' => '{"0":"9"}',
'title' => 'УЧИТЕЛЬ',
],
(object) [
'number' => '{"0":"51","1":"88"}',
'title' => 'НЕ УЧИТЕЛЬ',
],
];
$prsns = [
(object) [
'id' => "9",
'title' => 'Александр Жук',
],
(object) [
'id' => "88",
'title' => 'Максим Муха',
],
];
$roleActors = [];
foreach ($roles as $role) {
$personIds = json_decode($role->number, true);
foreach ($personIds as $personId) {
$roleActors[$personId] = $role->title;
}
}
echo "<pre>";
print_r($roleActors);
echo "</pre>\n<br>";
foreach ($prsns as $person) {
print_r("<pre>" . $person->title . " {$roleActors[$person->id]}</pre>");
echo "\n<br>";
}
Пример карты данных сопоставления:
Array
(
[9] => УЧИТЕЛЬ
[51] => НЕ УЧИТЕЛЬ
[88] => НЕ УЧИТЕЛЬ
)
Итог:
Александр Жук УЧИТЕЛЬ
Максим Муха НЕ УЧИТЕЛЬ