Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

159
Views
Usando una matriz de valores con una expresión de coincidencia en PHP

¿Hay alguna manera de usar una matriz como una lista de valores para comparar en una expresión de match en PHP?

Considera esto:

 return match ($field) { 'id', 'first_name', 'last_name', 'updated_at', 'created_at' => (string) $item->{$field}, 'image' => $item->{$field}->getUrls(), 'balance' => (int) $item->{$field}, default => null };

Si bien lo anterior funciona, me gustaría formatear la declaración de coincidencia de una manera más legible/manejable. Por ejemplo, uso la expresión anterior en mis transformadores de datos para presentar datos en mis API; como tal, puedo encontrarme en situaciones en las que se devuelven muchos campos en un formato, y sería significativamente más legible presentarlo de la siguiente manera (o algo similar):

 $string_columns = ['id', 'first_name', 'last_name', 'updated_at', 'created_at']; return match ($field) { $string_columns => (string) $item->{$field}, 'image' => $item->{$field}->getUrls(), 'balance' => (int) $item->{$field}, default => null };
over 4 years ago · Santiago Trujillo
2 answers
Answer question

0

Su pregunta me inspiró a verificar si ...$string_columns funcionaría para la declaración de match , pero no es así.

No creo que haya ninguna forma de hacerlo con match , aparte de los trucos.

Un truco que pensé fue crear una función auxiliar para devolver el valor solo si está en la matriz:

 function any(array $values, $value) { return in_array($value, $values, true) ? $value : null; } $string_columns = ['id', 'first_name', 'last_name', 'updated_at', 'created_at']; return match ($field) { any($string_columns, $field) => (string) $item->{$field}, 'image' => $item->{$field}->getUrls(), 'balance' => (int) $item->{$field}, default => null };

Un poco detallado, pero funcionaría.

Creo que vale la pena entender la match como una construcción del lenguaje que se adapta solo a ciertos escenarios.

over 4 years ago · Santiago Trujillo Report

0

No es posible. Simplemente agregue in_array en el valor predeterminado.

 return match ($field) { 'image' => $item->{$field}->getUrls(), 'balance' => (int) $item->{$field}, default => in_array($value, $string_columns, true) ? (string) $item->{$field} : null; };

Si habrá más matrices, puede encadenar el operador ternario

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!