NOVINKA! E-learningové kurzy umělé inteligence. Nyní AI za nejlepší ceny. Zjisti více:
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!

Diskuze: Prerobenie array

V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.

Aktivity
Avatar
Lava
Člen
Avatar
Lava:2.2.2018 21:02

Buď som už naozaj sprostý, alebo je proste len veľa hodín. Potrebujem prerobiť toto pole

object(Illuminate\Support\Collection)[213]
  protected 'items' =>
    array (size=4)
      0 =>
        object(stdClass)[214]
          public 'module_id' => int 1
          public 'module_name' => string 'Statická stránka' (length=18)
          public 'module_url' => string 'static' (length=6)
      1 =>
        object(stdClass)[210]
          public 'module_id' => int 2
          public 'module_name' => string 'Články' (length=8)
          public 'module_url' => string 'articles' (length=8)
      2 =>
        object(stdClass)[216]
          public 'module_id' => int 3
          public 'module_name' => string 'Úvodná stránka' (length=17)
          public 'module_url' => string 'homepage' (length=8)
      3 =>
        object(stdClass)[217]
          public 'module_id' => int 4
          public 'module_name' => string 'Kontaktný formulár' (length=20)
          public 'module_url' => string 'contact-form' (length=12)

Aby vyzeralo takto:

[1] => 'Statická stránka'
[2] = > 'Články'
atď.

Vedel by mi prosím niekto podať pomocnú ruku? Snažím sa to foreachovať, ale bezvýsledne. Je to z laravelu z DB a potrebujem z toho vybrať to, čo som uviedol vyššie do form>select

Odpovědět
2.2.2018 21:02
Aspartám, sacharín, to je môj vitamín
Avatar
Odpovídá na Lava
Honza Prosecký:3.2.2018 11:18

Zavolej na ty kolekci mapWithKeys s callbackem function($variable) {
Return [$variable->moduleId => $variable->moduleName}

 
Nahoru Odpovědět
3.2.2018 11:18
Avatar
Lava
Člen
Avatar
Lava:3.2.2018 22:56

Som fakt hlupák... Hír's d rezolušn

foreach($resultset as $result) {
            $array[$result->module_id] = $result->module_name;
        }
Editováno 3.2.2018 22:56
Akceptované řešení
+5 Zkušeností
Řešení problému
Nahoru Odpovědět
3.2.2018 22:56
Aspartám, sacharín, to je môj vitamín
Avatar
klareek
Člen
Avatar
Odpovídá na Lava
klareek:4.2.2018 23:34

Tohle je dost imperativní řešení, zkus array_column a něco takového:

array_column($pole, 'module_name', 'module_id');
 
Nahoru Odpovědět
4.2.2018 23:34
Avatar
Odpovídá na klareek
Honza Prosecký:5.2.2018 21:48

Spis by si mel precist API ke kolekcim z laravelu. Na tohle je tam metoda

 
Nahoru Odpovědět
5.2.2018 21:48
Avatar
Lava
Člen
Avatar
Lava:5.2.2018 23:07

V laraveli je na všetko metoda... keby som to mal všetko skúmať, zabijem 10krát toľko času, ako keď to spravím manuálne.

Nahoru Odpovědět
5.2.2018 23:07
Aspartám, sacharín, to je môj vitamín
Avatar
Neaktivní uživatel:6.2.2018 0:49

To ze na to ma laravel metodu, neznamena ze je rychlejsi.

Nahoru Odpovědět
6.2.2018 0:49
Neaktivní uživatelský účet
Avatar
Marian Benčat:6.2.2018 8:31

Já tedy nejsem díkybohu péhápkář už asi 10 let, ale nemá náhodou PHPko něco jako array_map() ?

<?php
function mapFce($i)
{
  return($i->module_id);
}

$newArr = array_map("mapFce",$old));
?>

Omlouvám se, pokud jsem řekl hloupost ;-) Ale z mého pohledu jde o přemapování jednoho pole na druhé :-) takže klasika (.map() v js, .select() v .NET, transform v Jave)

Editováno 6.2.2018 8:34
Nahoru Odpovědět
6.2.2018 8:31
Totalitní admini..
Avatar
TomasGlawaty
Člen
Avatar
Odpovídá na Lava
TomasGlawaty:6.2.2018 13:01

A nebo třeba takto:

$pairs = array_combine(
        array_map(function (\stdClass $row) {
                return $row->module_id;
        }, $collection->all()),
        array_map(function (\stdClass $row) {
                return $row->module_name;
        }, $collection->all())
);

, základy PHP :)

 
Nahoru Odpovědět
6.2.2018 13:01
Avatar
klareek
Člen
Avatar
Odpovídá na TomasGlawaty
klareek:6.2.2018 14:43

Zbytečně dlouhý a neefektivní.

 
Nahoru Odpovědět
6.2.2018 14:43
Avatar
klareek
Člen
Avatar
Odpovídá na Marian Benčat
klareek:6.2.2018 14:44

To sice jo, ale nebudeš mít klíče, který tazatel požaduje.

 
Nahoru Odpovědět
6.2.2018 14:44
Avatar
klareek
Člen
Avatar
Odpovídá na Lava
klareek:6.2.2018 14:45

Změna nebo vyhození frameworku je vždy cesta :)

 
Nahoru Odpovědět
6.2.2018 14:45
Avatar
Odpovídá na klareek
Marian Benčat:6.2.2018 18:10

Aha, už chápu co pan požaduje :) tech klíčů na základě ID jsem si nevsimnul.

Nahoru Odpovědět
6.2.2018 18:10
Totalitní admini..
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 13 zpráv z 13.