Versio

Renamen van array keys

Overzicht Reageren

Niels Kieviet
Beheerder

Niels Kieviet

20/12/2010 21:36:26
Quote Anchor link
Goedenavond,

stel ik heb de volgende array

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
<?php
Array
(
    [
module1] => Array
        (
            [
information] => Array
                (
                    [
name] => test1
                    [description] => Bladiebladieblabla ....
                    [
author] => Array
                        (
                            [
name] => .........
                            [
email] => .....
                            [
homepage] => ....
                        )

                    [
license] => Array
                        (
                            [
version] => .....
                            [
copyright] => ....
                        )

                )

            [
options] => Array
                (
                    [
path] => path/to/module
                    [frontController] => .....
                    [
menu] => Array
                        (
                            [
name] => Test module
                            [sub-actions] => Array
                                (
                                    [
test-1] => Array
                                        (
                                            [
name] => submodule 1
                                            [link] => link-naar-actie-in-de-hoofd-module
                                            [image] => naam-van-icon
                                        )

                                )

                        )

                )

            [
routes] => Array
                (
                    [
file] => routes.ini
                )

        )

    [
module2] => Array
        (
            [
information] => Array
                (
                    [
name] => test2
                    [description] => Bladiebladieblabla ....
                    [
author] => Array
                        (
                            [
name] => .........
                            [
email] => .....
                            [
homepage] => ....
                        )

                    [
license] => Array
                        (
                            [
version] => .....
                            [
copyright] => ....
                        )

                )

            [
options] => Array
                (
                    [
path] => path/to/module
                    [frontController] => .....
                    [
menu] => Array
                        (
                            [
name] => Test module
                            [sub-actions] => Array
                                (
                                    [
test-1] => Array
                                        (
                                            [
name] => submodule 1
                                            [link] => link-naar-actie-in-de-hoofd-module
                                            [image] => naam-van-icon
                                        )

                                )

                        )

                )

            [
routes] => Array
                (
                    [
file] => routes.ini
                )

        )
)

?>

En ik wil de keys: 'Module1', en 'Module2' veranderen naar wat is ingevuld bij bv: information->name. Dus module1 zou dan 'test1' worden en module2 'test2'.

Hoe kan ik dit realiseren?

Alvast bedankt
 
PHP hulp

PHP hulp

25/05/2012 14:33:40
Gesponsorde koppelingen:
 
Karl Karl

Karl Karl

20/12/2010 21:46:57
Quote Anchor link
Dit ?
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
<?php

function renameArrayKeys($orgArray)
{

    $tempArray = array();
    foreach($orgArray as $data)
    {

        $tempArray[$data['information']['name']] = $data;
    }

return $rempArray;
}

?>

Ongetest. Hersenspinsel.
Gewijzigd op 20/12/2010 21:48:04 door Karl Karl
 
Niels Kieviet
Beheerder

Niels Kieviet

20/12/2010 21:53:18
Quote Anchor link
Werkt voor de heft. Renamed alleen de eerste, maar array 'module2' wordt verwijderd. Dit is de code waarmee de array wordt gecontroleerd en dergelijke. Let niet op de netheid / snelheid etc, dat moet ik nog verbeteren.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
<?php
public function setModule( Array $options = array( ) )
    {

        if( count( $options ) == 0 ) {
            throw new Module_Exception( 'Er zijn geen opties in de array gevonden' );
        }

        $keys = array_keys( $options );
        for( $i = 0; $i < count( $keys ); $i++ ) {
            if( !isset( $options[$keys[$i]]['information'], $options ) ) {
                throw new Module_Exception( 'Key: \'Information\' kan niet in de array met opties worden gevonden' );
            }

            if( !isset( $options[$keys[$i]]['options'], $options ) ) {
                throw new Module_Exception( 'Key: \'Options\' kan niet in de array met opties worden gevonden');
            }

            if( count( $options[$keys[$i]]['information'] ) == 0 ) {
                throw new Module_Exception( 'Er zijn geen opties in sub-array \'Information\' gevonden' );
            }

            if( count( $options[$keys[$i]]['options'] ) == 0 ) {
                throw new Module_Exception( 'Er zijn geen opties in sub-array \'Options\' gevonden' );
            }

            if( array_key_exists( 'routes', $options ) ) {
                if( count( $options['routes'] ) == 0 ) {
                    throw new Module_Exception( 'Er zijn geen opties in sub-array \'Routes\' gevonden' );
                }
            }

            if( !isset( $options[$keys[$i]]['information']['name'], $options ) || is_null( $options[$keys[$i]]['information']['name'] ) ) {
                throw new Module_Exception( 'Key: \'Name\' kan niet in de sub-array \'Information\' worden gevonden, of is niet gevuld' );
            }

            if( !isset( $options[$keys[$i]]['information']['description'], $options ) || is_null( $options[$keys[$i]]['information']['description'] ) ) {
                throw new Module_Exception( 'Key: \'Description\' kan niet in de sub-array \'Information\' worden gevonden, of is niet gevuld' );
            }

            if( !isset( $options[$keys[$i]]['information']['author'], $options ) || !is_array( $options[$keys[$i]]['information']['author'] ) ) {
                throw new Module_Exception( 'Key: \'Author\' kan niet in de sub-array \'Information\' worden gevonden, of is geen array' );
            }

            if( !isset( $options[$keys[$i]]['information']['license'], $options ) || !is_array( $options[$keys[$i]]['information']['license'] ) ) {
                throw new Module_Exception( 'Key: \'License\' kan niet in de sub-array \'Information\' worden gevonden, of is geen array' );
            }

            if( !isset( $options[$keys[$i]]['information']['author']['name'], $options ) || is_null( $options[$keys[$i]]['information']['author']['name'] ) ) {
                throw new Module_Exception( 'Value: \'Name\' kan niet in de sub-array \'Information > author\' worden gevonden, of is niet gevuld' );
            }

            if( !isset( $options[$keys[$i]]['information']['author']['email'], $options ) || is_null( $options[$keys[$i]]['information']['author']['email'] ) ) {
                throw new Module_Exception( 'Value: \'Email\' kan niet in de sub-array \'Information > author\' worden gevonden, of is niet gevuld' );
            }

            if( !isset( $options[$keys[$i]]['information']['author']['homepage'], $options ) || is_null( $options[$keys[$i]]['information']['author']['homepage'] ) ) {
                throw new Module_Exception( 'Value: \'Homepage\' kan niet in de sub-array \'Information > author\' worden gevonden, of is niet gevuld' );
            }

            if( !isset( $options[$keys[$i]]['information']['license']['version'], $options ) || is_null( $options[$keys[$i]]['information']['license']['version'] ) ) {
                throw new Module_Exception( 'Value: \'Version\' kan niet in de sub-array \'Information > license\' worden gevonden, of is niet gevuld' );
            }

            if( !isset( $options[$keys[$i]]['information']['license']['copyright'], $options ) || is_null( $options[$keys[$i]]['information']['license']['copyright'] ) ) {
                throw new Module_Exception( 'Value: \'Copyright\' kan niet in de sub-array \'Information > license\' worden gevonden, of is niet gevuld' );
            }

            if( !isset( $options[$keys[$i]]['options']['path'], $options ) || is_null( $options[$keys[$i]]['options']['path'] ) ) {
                throw new Module_Exception( 'Key: \'Path\' kan niet in de sub-array \'Options\' worden gevonden, of is niet gevuld' );
            }

            if( !isset( $options[$keys[$i]]['options']['frontController'], $options ) || is_null( $options[$keys[$i]]['options']['frontController'] ) ) {
                throw new Module_Exception( 'Key: \'frontController\' kan niet in de sub-array \'Options\' worden gevonden, of is niet gevuld' );
            }

            if( !isset( $options[$keys[$i]]['options']['menu'], $options ) || !is_array( $options[$keys[$i]]['options']['menu'] ) ) {
                throw new Module_Exception( 'Key: \'menu\' kan niet in de sub-array \'Options\' worden gevonden, of is geen array' );
            }

            if( !isset( $options[$keys[$i]]['options']['menu']['name'], $options ) || is_null( $options[$keys[$i]]['options']['menu']['name'] ) ) {
                throw new Module_Exception( 'Value: \'Name\' kan niet in de sub-array \'Options > menu\' worden gevonden, of is niet gevuld' );
            }

            if( !isset( $options[$keys[$i]]['options']['menu']['sub-actions'] ) || !is_array( $options[$keys[$i]]['options']['menu']['sub-actions'] ) ) {
                throw new Module_Exception( 'Value: \'Sub-actions\' kan niet in de sub-array \'Options > menu\' worden gevonden, of is geen array' );
            }

            if( isset( $this->modules[$options[$keys[$i]]['information']['name']] ) ) {
                throw new Module_Exception( 'Deze module is al reeds geinstalleerd' );
            }
        }

        $tempArray = array( );
        foreach( $options as $data ) {
            $tempArray[$data['information']['name']] = $data;
        }

        echo '<pre>';
        print_r($tempArray);
        //return $options;
    }
Gewijzigd op 20/12/2010 21:55:52 door Niels Kieviet
 
Karl Karl

Karl Karl

20/12/2010 21:59:39
Quote Anchor link
Wow.
Naja, zal wel effe gaan testen.
Eerst die @$#$%$#^$%^ xdebug uit zien te krijgen.
 
Niels Kieviet
Beheerder

Niels Kieviet

20/12/2010 22:01:53
Quote Anchor link
Goed, ik wacht rustig af, en probeer ondertussen ook nog wat :)

Quote:
Eerst die @$#$%$#^$%^ xdebug uit zien te krijgen.

Andere editor even gebruiken? :)
 
Karl Karl

Karl Karl

20/12/2010 22:06:00
Quote Anchor link
Als je een test array hebt zou het wat sneller gaan.
Nee. Die stomme xdebug wilt niet met editor koppelen :-(
Maar goed, php.ini al verneukt, dus het werkt weer.
 
Niels Kieviet
Beheerder

Niels Kieviet

20/12/2010 22:06:51
Quote Anchor link
Test array gaf ik toch aan het begin van dit topic?

Nogmaals dan:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
<?php
[code]<?php
Array
(
    [
module1] => Array
        (
            [
information] => Array
                (
                    [
name] => test1
                    [description] => Bladiebladieblabla ....
                    [
author] => Array
                        (
                            [
name] => .........
                            [
email] => .....
                            [
homepage] => ....
                        )

                    [
license] => Array
                        (
                            [
version] => .....
                            [
copyright] => ....
                        )

                )

            [
options] => Array
                (
                    [
path] => path/to/module
                    [frontController] => .....
                    [
menu] => Array
                        (
                            [
name] => Test module
                            [sub-actions] => Array
                                (
                                    [
test-1] => Array
                                        (
                                            [
name] => submodule 1
                                            [link] => link-naar-actie-in-de-hoofd-module
                                            [image] => naam-van-icon
                                        )

                                )

                        )

                )

            [
routes] => Array
                (
                    [
file] => routes.ini
                )

        )

    [
module2] => Array
        (
            [
information] => Array
                (
                    [
name] => test2
                    [description] => Bladiebladieblabla ....
                    [
author] => Array
                        (
                            [
name] => .........
                            [
email] => .....
                            [
homepage] => ....
                        )

                    [
license] => Array
                        (
                            [
version] => .....
                            [
copyright] => ....
                        )

                )

            [
options] => Array
                (
                    [
path] => path/to/module
                    [frontController] => .....
                    [
menu] => Array
                        (
                            [
name] => Test module
                            [sub-actions] => Array
                                (
                                    [
test-1] => Array
                                        (
                                            [
name] => submodule 1
                                            [link] => link-naar-actie-in-de-hoofd-module
                                            [image] => naam-van-icon
                                        )

                                )

                        )

                )

            [
routes] => Array
                (
                    [
file] => routes.ini
                )

        )
)

?>
Gewijzigd op 20/12/2010 22:07:32 door Niels Kieviet
 
Karl Karl

Karl Karl

20/12/2010 22:08:30
Quote Anchor link
Ja, wow, dat kan je ook echt in php dumpen -_-'

Heb al een array.
Nee. Incorrect.
Gewijzigd op 20/12/2010 22:15:16 door Karl Karl
 
Niels Kieviet
Beheerder

Niels Kieviet

20/12/2010 22:09:44
Quote Anchor link
Oh zo, my bad..

edit: nu heb je er wel één ;)

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
<?php

$options
= array(

    // Module 1
    'module1' => array(
        'information' => array(
            'name'                =>     'e-commerce',
            'description'        =>     'Module waarmee e-commerce op het web kan worden verricht. Bladiebladieblabla ....',
            'author'            =>     array(
                'name'            =>     'Niels kieviet',
                'email'            =>    '.......',
                'homepage'        =>    '..........'
            ),
            'license'            =>     array(
                'version'        =>    '$Revision v1.00$',
                'copyright'        =>    'Copyright (c) 2010, Niels kieviet'
            )
        ),

        'options'     => array(
            'path'                =>     'path/to/module',
            'frontController'        =>    'BaseController', // path:/controllers/BaseController.php
            'menu'                 =>     array(
                'name'             =>     'Test module',
                'sub-actions'    =>    array (
                    'test-1'    =>     array(
                        'name'    =>     'submodule 1',
                        'link'    =>     'link-naar-actie-in-de-hoofd-module',
                        'image'    =>     'naam-van-icon' // Als deze leeg is wordt een standaard gepakt
                    )
                )
            )
        ),

        'routes' => array(
            'file'                =>    'routes.ini' // path:/config/routes.ini    
        )
    ),

    
    // Module 2
    'module2' => array(
        'information' => array(
            'name'                =>     'e-commerce',
            'description'        =>     'Module waarmee e-commerce op het web kan worden verricht. Bladiebladieblabla ....',
            'author'            =>     array(
                'name'            =>     'Niels kieviet',
                'email'            =>    '.....',
                'homepage'        =>    '....'
            ),
            'license'            =>     array(
                'version'        =>    '$Revision v1.00$',
                'copyright'        =>    'Copyright (c) 2010, Niels kieviet'
            )
        ),

        'options'     => array(
            'path'                =>     'path/to/module',
            'frontController'        =>    'BaseController', // path:/controllers/BaseController.php
            'menu'                 =>     array(
                'name'             =>     'Test module',
                'sub-actions'    =>    array (
                    'test-1'    =>     array(
                        'name'    =>     'submodule 1',
                        'link'    =>     'link-naar-actie-in-de-hoofd-module',
                        'image'    =>     'naam-van-icon' // Als deze leeg is wordt een standaard gepakt
                    )
                )
            )
        ),

        'routes' => array(
            'file'                =>    'routes.ini' // path:/config/routes.ini    
        )
    )
);
Gewijzigd op 20/12/2010 22:16:27 door Niels Kieviet
 
Karl Karl

Karl Karl

20/12/2010 22:27:30
Quote Anchor link
Dit is ook nogal wiedes weer.
Kijk eens naar de name...
 
Niels Kieviet
Beheerder

Niels Kieviet

20/12/2010 22:29:52
Quote Anchor link
Hoebedoel je? twee dezelfde namen? Ja dat is mijn fout, dat mag niet, maar daar is ook controle op, was gewoon even voor het voorbeeld.

Maar ga eerst eens goed hierover slapen :) Ik lees je reactie nog wel.

Fijne avond nog.
 
Karl Karl

Karl Karl

20/12/2010 23:00:20
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?php
$blaat
= array();
$blaat['key'] = 'string 1';
$blaat['key'] = 'string 2';
var_dump($blaat);
?>

Dit pas jij toe.
 
Niels Kieviet
Beheerder

Niels Kieviet

21/12/2010 13:52:00
Quote Anchor link
Ja? Wat probeer je daarmee te zeggen? Dubbele waarden zeker? Kijk in een client map moet via array, xml of ini een configuratie voor de modules worden gedefinieerd.

Maar dat moet een enkele array wezen. En om het netjes te houden kan je ze dus

- module1
- module2
- module3

etc, noemen. Maar om die keys als naam van de module weer te geven is niet netjes, en om bijvoorbeeld, e-commerce als directe configuratie key te gebruiken wil ik ook niet. Het moet namelijk, overzichtelijk blijven. Daarom moet information -> name als key worden gezet, i.p.v van de mogelijkheden hierboven.

Had gedacht dat, dat niet zo moeilijk moest zijn, maar integendeel dus :) maar als je nog wat input hebt, graag!
Gewijzigd op 21/12/2010 13:53:41 door Niels Kieviet
 
Ozzie PHP

Ozzie PHP

21/12/2010 13:55:12
Quote Anchor link
kan je niet een kopie maken van die array en daar de goede waardes inzetten? Of is dat niet de bedoeling?
 
Niels Kieviet
Beheerder

Niels Kieviet

21/12/2010 13:56:35
Quote Anchor link
Ja precies dat is de bedoeling. Maar het probleem is dat ik niet weet hoe ;-) De array_keys zijn bij 'php' niet bekend. Dit kan ook jan, piet, arie, klaas wezen.

Dus een klein voorbeeld:

- key: jan.
- key: piet.

array_keys( $demodulearray );

die geeft dus dit als resultaat:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?
array(
    [
0]    => 'jan'
    [1]    => 'piet'
)
?>


en de array van jan bevat bijvoorbeeld dit
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
<?
array
(
    'information' => array(
        'name'    => 'test-module'
    )
)

?>


Nu moet dus de key 'jan' veranderd worden naar 'test-module'. En bij de key 'piet' moet hij dus information->name van key 'piet' pakken en replacen. Snap je? Het script van karl deed dit wel, maar de key 'piet' verwijderde hij dus.



Toevoeging op 21/12/2010 14:59:39:

Dit deed het hem.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?php
$result
= array();
    for( $i = 0; $i < count( $keys ); $i++ ) {
        $result[$options[$keys[$i]]['information']['name']] = $options[$keys[$i]];
    }

?>

Nu nog even de controle dat hij niet twee keer mag voorkomen :) Leuke, puzzels zijn dit altijd :)
Gewijzigd op 21/12/2010 15:19:07 door Niels Kieviet
 
Karl Karl

Karl Karl

21/12/2010 15:44:35
Quote Anchor link
Jij hebt dus nu precies hetzelfde als ik heb, maar in plaats van een foreach heb je een for loop en het is geen functie.
$result[$options[$keys[$i]]['information']['name']] = !isset($result[$options[$keys[$i]]['information']['name']]) ? $options[$keys[$i]] : $result[$options[$keys[$i]]['information']['name']];
Nu heb je ook check.
 
Niels Kieviet
Beheerder

Niels Kieviet

21/12/2010 15:46:24
Quote Anchor link
@Karl

Klopt;) Het probleem is dus dat ik verschillende keys had moeten kiezen.
Dom van me.. Ik kwam er net ineens achter. Maar vind het met een for loopje van mooier werken :)

Maar toch erg bedankt voor je input, heeft me goed geholpen. Laat je het resultaat van het geheel nog wel eens een keertje zien;)
 
Karl Karl

Karl Karl

21/12/2010 15:47:03
Quote Anchor link
Ja, mijn constructie werkt?
 
Niels Kieviet
Beheerder

Niels Kieviet

21/12/2010 15:47:48
Quote Anchor link
de verkorte if / else ? Dat had ik al opgelost voordat jij hem poste ;-)
 
Karl Karl

Karl Karl

21/12/2010 15:52:00
Quote Anchor link
Had je niet vermeld.
 
Niels Kieviet
Beheerder

Niels Kieviet

21/12/2010 15:52:38
Quote Anchor link
Dat klopt :) Neem je ook niks kwalijk hoor ... Haha dat moest er nog eens bij komen.. Maar goed, hartelijk dank, ik kan weer verder :D
Gewijzigd op 21/12/2010 15:52:52 door Niels Kieviet
 



Overzicht Reageren