[PHP] Functie om meteen een array-key te retourneren?

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Reveller
  • Registratie: Augustus 2002
  • Laatst online: 05-12-2022
Ik heb de volgende code:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
$users[15] = Edwin;
$users[72] = Frank;
$users[88] = David;

function return_key($value, $users) {
if (in_array($value, $users)) {
  foreach ($users as $uid => $name) {
    if ($value == $name) {
      return $uid;
    }
  }
}

echo return_key('Frank', $users); // geeft "72" terug

Met andere woorden: ik heb een kleine functie gebouwd die de key teruggeeft bij een value uit een array. Ik heb die funcie gemaakt omdat ik op php.net nergens een standaard php functie kon vinden die dit doet. Het opzoeken van een array key lijkt me alleen zo'n standaard bewerking, dat ik me afvraag of ik ergens overheen gekeken heb?

"Real software engineers work from 9 to 5, because that is the way the job is described in the formal spec. Working late would feel like using an undocumented external procedure."


Acties:
  • 0 Henk 'm!

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

http://php.net/array_search lijkt me wel relevant.

En als je er potentieel meerdere wilt:
http://php.net/array_keys

Overigens wordt er gewoon naar array_search verwezen vanaf de pagina waar in_array wordt beschreven.

[ Voor 78% gewijzigd door ACM op 26-07-2005 14:16 ]


Acties:
  • 0 Henk 'm!

  • Reveller
  • Registratie: Augustus 2002
  • Laatst online: 05-12-2022
Dank je wel - daar heb ik dus echt overheen gelezen. Ik heb een behoorlijke tijd doorgebracht op bijvoorbeeld de php.net/array pagina, en uiteindelijk maar mijn eigen functie gebouwd.

Nu ik toch een topic geopend heb - ik ben ook al een tijdje op zoek naar een manier om dit te herschrijven:
PHP:
1
2
3
4
5
6
7
8
9
10
11
$users[15] = Edwin;
$users[72] = Frank;
$users[88] = David;

// dit probeerde ik te herschrijven...
foreach ($users as $uid => $name) {
  $users[$uid] = strtolower($name);
}

// ...naar dit
$users = array_walk($users, 'strtolower');

Maar dan krijg ik een error voor "wrong parameter count" voor strtolower. Bovendien staat op php.net dat array_walk voor user defined functies is. En dat ik strtolower niet. Hierbij dus mijn vraag of je in 1 regel toch strtolower kunt loslaten op een array?

"Real software engineers work from 9 to 5, because that is the way the job is described in the formal spec. Working late would feel like using an undocumented external procedure."


Acties:
  • 0 Henk 'm!

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

array_walk geeft geen array terug, maar werkt op het array dat je meegeeft. Dus als je later met die $users weer gaat werken zal dat best misgaan. Maar sowieso werkt array_walk zo te zien met key-value paren.

Ik denk dat array_map een handigere functie voor je is.

Acties:
  • 0 Henk 'm!

  • Genoil
  • Registratie: Maart 2000
  • Laatst online: 12-11-2023
in 1 regel:
PHP:
1
$users = preg_replace("/.+/e", "strtolower(\"$0\")", $users);

Acties:
  • 0 Henk 'm!

  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 18-09 16:28

Bosmonster

*zucht*

Genoil schreef op dinsdag 26 juli 2005 @ 15:12:
in 1 regel:
PHP:
1
$users = preg_replace("/.+/e", "strtolower(\"$0\")", $users);
Waarom heel de PRE engine opstarten als hier standaard functietjes voor zijn? Denk dat zelfs handmatig door de array loopen nog sneller is dan dit.

(om het over mogelijke security issues met /e parameter nog maar niet te hebben)

[ Voor 11% gewijzigd door Bosmonster op 26-07-2005 15:40 ]


Acties:
  • 0 Henk 'm!

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Genoil schreef op dinsdag 26 juli 2005 @ 15:12:
in 1 regel:
PHP:
1
$users = preg_replace("/.+/e", "strtolower(\"$0\")", $users);
1 regel:
PHP:
1
$users = array_map(strtolower, $users);


;)

Acties:
  • 0 Henk 'm!

  • Genoil
  • Registratie: Maart 2000
  • Laatst online: 12-11-2023
oh die array_map mag dan weer wel een niet-user callback, dat had ik zo snel niet gezien :)

mijn suggestie is inderdaad retetraag :+

Acties:
  • 0 Henk 'm!

  • Reveller
  • Registratie: Augustus 2002
  • Laatst online: 05-12-2022
ACM schreef op dinsdag 26 juli 2005 @ 15:57:
PHP:
1
$users = array_map(strtolower, $users);
@Iedereen - bedankt voor jullie hulp!
@ACM - ik had zojuist hetzelfde gevonden dankzij jouw link naar array_map :)

"Real software engineers work from 9 to 5, because that is the way the job is described in the formal spec. Working late would feel like using an undocumented external procedure."

Pagina: 1