Normalizace pole v PHP

phpČ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
        )

)

32 Responses to Normalizace pole v PHP

  1. Pingback: SETH

  2. Pingback: BRANDON

  3. Pingback: LEWIS

  4. Pingback: RENE

  5. Pingback: SALVADOR

  6. Pingback: PERRY

  7. Pingback: SAMUEL

  8. Pingback: FELIX

  9. Pingback: KELLY

  10. Pingback: MATHEW

  11. Pingback: CARL

  12. Pingback: NATHAN

  13. Pingback: BILLY

  14. Pingback: RUBEN

  15. Pingback: MARCUS

  16. Pingback: DARYL

  17. Pingback: RAY

  18. Pingback: LAWRENCE

  19. Pingback: SERGIO

  20. Pingback: MITCHELL

  21. Pingback: VINCENT

  22. Pingback: BRYAN

  23. Pingback: HOMER

  24. Pingback: PHILIP

  25. Pingback: MARVIN

  26. Pingback: BRUCE

  27. Pingback: JOEL

  28. Pingback: CHRIS

  29. Pingback: STEVE

  30. Pingback: BRENT

  31. Pingback: OLIVER

  32. Pingback: MARTIN

Napsat komentář

Vaše emailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *

*

Můžete používat následující HTML značky a atributy: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Spam protection by WP Captcha-Free