Často v PHP pracujeme s výsledkem z databáze. Tento výsledek (data) se vetšinou vyplatí mít v poli kvůli snadné manipulaci. Nejednou však nastane situace, kdy potřebujeme pole v jiném tvaru než dostáváme výsledek.
Běžně vypadá pole dat následovně:
Array
(
[0] => Array
(
[id] => 1
[jmeno] => Richard
)
[1] => Array
(
[id] => 3
[jmeno] => Michal
)
[2] => Array
(
[id] => 5
[jmeno] => Petra
)
)
Tedy nějaký ten primary auto increment (id) a další vybrané sloupce. My ale chceme, aby klíčem pole byla hodnota např. primárního klíče. Vytvoříme si na to tedy normalizační funkci, která bude umožňovat mimo jiné také použití zástupného znaku ‘*’ v hodnotě pro přiřazení všech sloupců:
<?php
/**
* Normalizace dvou rozmerneho pole dle zadanych kriterii
* @param array $def - definice vysledku
* @param array $data - dvou rozmerne pole dat
* @return array
*/
function normalizeArray(Array $def, Array $data)
{
$dkey = key($def);
$dvalue = current($def);
$result = array();
if ($dkey && $dvalue) {
if ($dvalue == '*') {
foreach($data as $value) {
if (array_key_exists($dkey, $value)) {
$result[$value[$dkey]] = $value;
}
}
} else {
foreach($data as $value) {
if (array_key_exists($dkey, $value) && array_key_exists($dvalue, $value)) {
$result[$value[$dkey]] = $value[$dvalue];
}
}
}
return $result;
} else if ($dvalue) {
foreach($data as $value) {
if (array_key_exists($dvalue, $value)) {
$result[] = $value[$dvalue];
}
}
return $result;
}
return $data;
}
?>
Použití pak vypadá následovně:
<?php
$pole = array(
array('id' => 1, 'jmeno' => 'Richard'),
array('id' => 3, 'jmeno' => 'Michal'),
array('id' => 5, 'jmeno' => 'Petra'),
);
print_r(normalizeArray(array('id' => 'jmeno'), $pole));
print_r(normalizeArray(array('jmeno'), $pole));
print_r(normalizeArray(array('id' => '*'), $pole));
?>
Výsledek prvního volání normalizeArray():
Array
(
[1] => Richard
[3] => Michal
[5] => Petra
)
Výsledek druhého volání normalizeArray():
Array
(
[0] => Richard
[1] => Michal
[2] => Petra
)
Výsledek třetího volání normalizeArray() s použitím zástupného znaku ‘*’:
Array
(
[1] => Array
(
[id] => 1
[jmeno] => Richard
)
[3] => Array
(
[id] => 3
[jmeno] => Michal
)
[5] => Array
(
[id] => 5
[jmeno] => Petra
)
)
Pingback: SETH
Pingback: BRANDON
Pingback: LEWIS
Pingback: RENE
Pingback: SALVADOR
Pingback: PERRY
Pingback: SAMUEL
Pingback: FELIX
Pingback: KELLY
Pingback: MATHEW
Pingback: CARL
Pingback: NATHAN
Pingback: BILLY
Pingback: RUBEN
Pingback: MARCUS
Pingback: DARYL
Pingback: RAY
Pingback: LAWRENCE
Pingback: SERGIO
Pingback: MITCHELL
Pingback: VINCENT
Pingback: BRYAN
Pingback: HOMER
Pingback: PHILIP
Pingback: MARVIN
Pingback: BRUCE
Pingback: JOEL
Pingback: CHRIS
Pingback: STEVE
Pingback: BRENT
Pingback: OLIVER
Pingback: MARTIN