Tengo una variedad de tipos

$records = array(
array(
    'id' => 2135,
    'first_name' => 'John',
    'last_name' => 'Cena',
),
array(
    'id' => 5623,
    'first_name' => 'Peter',
    'last_name' => 'Doe',
));

Quiero mostrar la salida en el formato de

[2135] => John Cena
[5623] => Peter Doe

He estado usando el siguiente código para intentar mostrar mi resultado esperado pero no funciona.

$names = array_column($records, 'first_name' . 'last_name', 'id');

¿Cómo puedo concatenar dos columnas de matriz en una?

0
Bibek Aryal 17 sep. 2018 a las 08:06

5 respuestas

La mejor respuesta

Puede crear una nueva matriz utilizando foreach loop.

Prueba esto

  $newArray = [];
    foreach($records as $key => $value) {
      $newArray[$value['id']]= $value['first_name']." ".$value['last_name'];          
    }

   print_r($newArray); 

Salida

Array
(
    [2135] => John Cena
    [5623] => Peter Doe
)
3
shubham715 17 sep. 2018 a las 05:10

Array_column funciona en ese tipo de problema, pero aquí no puede concatenar las teclas first_name y last_name, por lo que también puede probar este código:

$records = array(
array(
    'id' => 2135,
    'first_name' => 'John',
    'last_name' => 'Cena',
),
array(
    'id' => 5623,
    'first_name' => 'Peter',
    'last_name' => 'Doe',
));

$tmp = [];

foreach($records as $key) {
    $tmp[$key["id"]] = $key["first_name"] . " " . $key["last_name"];
}

print_r($tmp); // Array ( [2135] => John Cena [5623] => Peter Doe );
0
Pankaj Bisht 18 sep. 2018 a las 04:55

La razón por la que su código actual no funciona es porque le está pidiendo a PHP que busque en la matriz $records la clave first_namelast_name, que no existe.

array_column solo devuelve una sola columna, como se indica en la entrada manual PHP

(PHP 5> = 5.5.0, PHP 7)

array_column - Devuelve los valores de una sola columna en la entrada

Debe recorrer la matriz y concatenar las cadenas manualmente. Una función que puede usar es array_reduce:

$names = array_reduce($records, function ($result, $item) {
    $result[$item['id']] = $item['first_name'] . ' ' . $item['last_name'];
    return $result;
});
4
mulquin 17 sep. 2018 a las 05:29

No hay una función integrada de php para hacer eso, supongo. Puede recorrer la matriz y concatenarlos.

$records = array(
array(
'id' => 2135,
'first_name' => 'John',
'last_name' => 'Cena',
),
array(
'id' => 5623,
'first_name' => 'Peter',
'last_name' => 'Doe', 
));

$newArray = array();
foreach($records as $data)
{
$index = "";
$value = "";
$indexLoop = 1;
foreach($data as $reckey => $recValue)
{
    if($indexLoop ==1)
    {
        $index = $recValue; 
    }else{
            $value .= $recValue." ";
         }  

    $indexLoop++;
}

$newArray[$index] = $value;
}

 echo "<pre>"; print_r($newArray);

Gracias

0
Delickate 17 sep. 2018 a las 05:31

Puede lograrlo creando la otra matriz. Simplemente combine el valor de la sub-matriz en la nueva matriz creada usando el bucle foreach .

$records = array(
array(
    'id' => 2135,
    'first_name' => 'John',
    'last_name' => 'Cena',
),
array(
    'id' => 5623,
    'first_name' => 'Peter',
    'last_name' => 'Doe',
));

foreach($records as $data)
{
  $temp[$data['id']] = $data['first_name'].' '.$data['last_name'];
}
echo "<pre>";
print_r($temp);



// Output

Array
(
    [2135] => John Cena
    [5623] => Peter Doe
)
1
sandeep soni 17 sep. 2018 a las 11:02