Как преобразовать значения массива в разделенную запятыми строку на основе заданных значений массива?

У меня есть массив, как указано ниже

Array
(
[5] => Array
(
[id] => 5
[first_name] => Diyaa
[profile_pic] => profile/user5.png
)

[8] => Array
(
[id] => 8
[first_name] => Raj
[profile_pic] => profile/user8.png
)

[12] => Array
(
[id] => 12
[first_name] => Vanathi
[profile_pic] => profile/user12.png
)

[15] => Array
(
[id] => 15
[first_name] => Giri
[profile_pic] => profile/user15.png
)

[19] => Array
(
[id] => 19
[first_name] => Mahesh
[profile_pic] => profile/user19.png
)
)

У меня есть другой массив, как указано ниже

Array
(
[0] => 8
[1] => 15
[2] => 19
)

Я хочу first_name от первый массив, основанный на второй массив значения => 8, 15 и 19.
Так мне нужно Радж, гири, Махеш в качестве вывода в виде строки, разделенной запятыми.
Как это получить..?

0

Решение

Этот код будет работать для вас: —

$array1 = array_column($array, 'first_name','id');
$array2 = [8,15,19];
$names = array_intersect_key($array1, array_flip($array2));
$names = implode(',',$names);
echo $names;
3

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

Здесь мы используем array_column а также array_intersect_key получить желаемый результат.

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

$result=array();
$result=  array_column($array, "first_name","id");
$result=array_intersect_key ($result,  array_flip($values));
echo implode(",",$result);
1

Попробуй это:

$namesArr = [];
foreach ($wantedIds as $wantedId) {
$namesArr[] = $array[$wantedId]['first_name'];
}
$namesStr = implode(',', $namesArr);

echo $namesStr; // Returns 'Raj,Giri,Mahesh'

Я определил $array а также $wantedIds как показано ниже:

$array = [
5 => [
'id'          => 5,
'first_name'  => 'Diyaa',
'profile_pic' => 'profile/user5.png',
],
8 => [
'id'          => 8,
'first_name'  => 'Raj',
'profile_pic' => 'profile/user8.png',
],
12 => [
'id'          => 12,
'first_name'  => 'Vanathi',
'profile_pic' => 'profile/user12.png',
],
15 => [
'id'          => 15,
'first_name'  => 'Giri',
'profile_pic' => 'profile/user15.png',
],
19 => [
'id'          => 19,
'first_name'  => 'Mahesh',
'profile_pic' => 'profile/user19.png',
],
];

$wantedIds = [8, 15, 19];
1

Попробуйте это:

$names = [];
foreach ($MainArray as $aIndex => $aPayload) // loop over the key and values of the first array
{
foreach ($searchArray as $b) // loop over your search array (we don't care about the indicies)
{
if ($aIndex == $b) // match up the index of the first array with the values of the second array
{
$names[] = $b['first_name'];// append the name to the return array
break; // since we've found the index break out of the inner loop
}
}
}
0
<?php
$abc = [
['id' => 5, 'firstname' => 'Diyya', 'profile_pic' => 'profile/user5.png'],
['id' => 8, 'firstname' => 'Raj', 'profile_pic' => 'profile/user8.png'],
['id' => 12, 'firstname' => 'Vanathi', 'profile_pic' => 'profile/user12.png']
];

$d = [8, 5, 12];

$output = [];
foreach ($abc as $user) {
if (in_array($user['id'], $d)) {
$output [] = $user['firstname'];
}
}
echo implode(",", $output);
?>
0

Есть и другие ответы, которые целесообразно использовать array_intersect_key() а также array_column() однако они используют их в неправильном порядке. Массив должен быть отфильтрован первым, чтобы array_column() обрабатывает меньший массив. Кроме того, потому что ваши подмассивы уже имеют ключи, которые представляют id значение внутри них, нет необходимости использовать index_key параметр array_column(), Это будет самый простой, самый прямой однострочник, который вы можете сделать:

Входы:

$array = [
5 => [
'id'          => 5,
'first_name'  => 'Diyaa',
'profile_pic' => 'profile/user5.png',
],
8 => [
'id'          => 8,
'first_name'  => 'Raj',
'profile_pic' => 'profile/user8.png',
],
12 => [
'id'          => 12,
'first_name'  => 'Vanathi',
'profile_pic' => 'profile/user12.png',
],
15 => [
'id'          => 15,
'first_name'  => 'Giri',
'profile_pic' => 'profile/user15.png',
],
19 => [
'id'          => 19,
'first_name'  => 'Mahesh',
'profile_pic' => 'profile/user19.png',
],
];
$search_keys=[8, 15, 19];

Метод (демонстрация):

echo implode(',',array_column(array_intersect_key($array,array_flip($search_keys)),'first_name'));

Объяснение:

  • Сначала переверните ключи / значения из $search_keys
  • Тогда используйте array_intersect_key() отфильтровать нежелательные подмассивы
  • Тогда используйте array_column() создать новый массив first_name ценности
  • Затем склейте их вместе запятыми, чтобы создать строку.

Выход:

Raj,Giri,Mahesh

…Это ответ, который будущие читатели SO должны учить и внедрять. К сожалению, поскольку у него меньше голосов и он не носит зеленую галочку, его, скорее всего, проигнорируют.
🙁

0