Array Multidimensionale Automatico

  • Creatore Discussione Creatore Discussione Mr. PHP
  • Data di inizio Data di inizio

Mr. PHP

Utente Attivo
31 Gen 2013
141
0
0
Salve Ragazzi volevo chiedervi e possibile creare un array multidimensionale automaticamente creando una funzione. Per esempio:
PHP:
function MultyArray( $a, $b ){

/*************/

}

$array = MultyArray( 'meta:title', 'Titolo' );

echo $array['meta']['title'];

Mi sto scervellando ma non riesco a creare una funzione decende.
 
PHP:
function MultyArray( $a, $b ){
 
 	$parts = explode(':', $a);
 	
 	return array( $parts[0] => array($parts[1] => $b) );
 
 }
 
 $array = MultyArray( 'meta:title', 'Titolo' );
 
 echo $array['meta']['title'];
 
PHP:
function MultyArray( $a, $b ){
 
 	$parts = explode(':', $a);
 	
 	return array( $parts[0] => array($parts[1] => $b) );
 
 }
 
 $array = MultyArray( 'meta:title', 'Titolo' );
 
 echo $array['meta']['title'];

Grazie per la risposta pero mi servirebbe piu dinamico questo e solo a 2 livelli. Es:
PHP:
$a = 'meta:title:author:name:ecc';
Diciamo bisognierebbe impostare un ciclo o cose del genere...
 
ciao
dovresti spiegare meglio cosa intendi per array multidimensionale
es ti scrivi
$a = 'meta:title:author:name:ecc';
vuoi ottenere
$pinco['meta']['title']
$pinco['meta']['author']
$pinco['meta']['name']
ecc...
e poi come devi valorizzare i vari elementi dell'arryai
es.
$b = 'divina commedia:alighieri:dante:ecc';
$pinco['meta']['title']=>"divina commedia"
$pinco['meta']['author']=>"alighieri"
$pinco['meta']['name']=>"dante"
ecc...
è così?
 
ciao
dovresti spiegare meglio cosa intendi per array multidimensionale
es ti scrivi
$a = 'meta:title:author:name:ecc';
vuoi ottenere
$pinco['meta']['title']
$pinco['meta']['author']
$pinco['meta']['name']
ecc...
e poi come devi valorizzare i vari elementi dell'arryai
es.
$b = 'divina commedia:alighieri:dante:ecc';
$pinco['meta']['title']=>"divina commedia"
$pinco['meta']['author']=>"alighieri"
$pinco['meta']['name']=>"dante"
ecc...
è così?

Eccoti un esempio ma e sbagliato:
PHP:
class MultyArray {

 private $array;

 function get( $a, $b ){
  
  $a = explode( ':', $a );
  
  $array = $this->multy( $a, $b );
  
  return $array;

 }

 function multy( $a, $b ){

		if( is_array( $a ) ){
			
			$count = count( $a ) - 1;
				
				foreach( $a as $k => $v ){
					
					if( $k == $count ){
						
						/*** Mi Manca questa parte e poi cmq non funziona bene *****/
						
					}else{
					
						unset( $a[$k] );
						
						$this->array = array( $v => $this->multy( $a, $b ) );
						
						break;
	
					}
					
				}
				
			}
			
		
		return $this->array;
 }

}
 
Ragazzi sono a buon punto o ad un vicolo cieco:
PHP:
class MultyArray {

private $array;

function set( $a, $b ){

$a = explode( ':', $a );

$array = $this->multy( $a, $b );

return $array;

}

private function multy( $a, $b ){

		if( is_array( $a ) ){
							
			foreach( $a as $k => $v ){
				
				unset( $a[$k] );
				
				$this->array = array( $v => $this->multy( $a, $b ) );
				
				break;
				
			}

		}
		
		return $this->array;

}

}

ecco il risultato:
PHP:
Array
(
    [post] => Array
        (
            [author] => Array
                (
                    [name] => 
                )

        )

)

Ora pero come faccio ad inserire il Valore nell Array ???
 
Ultima modifica:
non capisco cosa vuoi fare, cmq prova questo:

PHP:
 function MultyArray( $a, $b )
 {
 	$index = '';
    $return = array();
 	$parts = explode(':', $a);
 	
 	foreach ($parts as $j => $value )
 	{
 		if( empty($index) )
 			$index = $value;
 		
 		if( $value != $index)
 			$return[$index][$value] = $b;
 	}
 	 
 	return $return;
 
 }
 
 $array = MultyArray( 'meta:title:author:name', 'Titolo' );
 
 print_r( $array );

risultato
Codice:
Array
(
    [meta] => Array
        (
            [title] => Titolo
            [author] => Titolo
            [name] => Titolo
        )

)

forse devi spiegarci meglio cosa vuoi fare...
 
non capisco cosa vuoi fare, cmq prova questo:

PHP:
 function MultyArray( $a, $b )
 {
 	$index = '';
    $return = array();
 	$parts = explode(':', $a);
 	
 	foreach ($parts as $j => $value )
 	{
 		if( empty($index) )
 			$index = $value;
 		
 		if( $value != $index)
 			$return[$index][$value] = $b;
 	}
 	 
 	return $return;
 
 }
 
 $array = MultyArray( 'meta:title:author:name', 'Titolo' );
 
 print_r( $array );

risultato
Codice:
Array
(
    [meta] => Array
        (
            [title] => Titolo
            [author] => Titolo
            [name] => Titolo
        )

)

forse devi spiegarci meglio cosa vuoi fare...

Gia ho detto prima devo creare un array in questo modo:
PHP:
$array = new MultyArray();

$var = $array->set( 'post:author:name', 'Nome dell autore del post' );

echo $var['post']['author']['name'];

/* Oppure */

echo $array->get( 'post:author:name' );
 
Ultima modifica:
PHP:
function MultyArray( $strArray, $strValue )
 {
 	list($first, $second)  = explode(':', $strArray, 2);
 	
 	if( strpos($second, ':') !== false )
 		return array($first => MultyArray( $second, $strValue ));
 	else 
 		return array($first => array($second => $strValue) );
 }
 
 $array = MultyArray( 'post:author:name', 'Nome dell autore del post' );
 
 print_r( $array );


Codice:
Array
(
    [post] => Array
        (
            [author] => Array
                (
                    [name] => Nome dell autore del post
                )

        )

)
 
PHP:
function MultyArray( $strArray, $strValue )
 {
 	list($first, $second)  = explode(':', $strArray, 2);
 	
 	if( strpos($second, ':') !== false )
 		return array($first => MultyArray( $second, $strValue ));
 	else 
 		return array($first => array($second => $strValue) );
 }
 
 $array = MultyArray( 'post:author:name', 'Nome dell autore del post' );
 
 print_r( $array );


Codice:
Array
(
    [post] => Array
        (
            [author] => Array
                (
                    [name] => Nome dell autore del post
                )

        )

)

Grazie !!!
 
Scusami ce un problema ora, non posso inserire piu array nella stessa variabile mi legge solo l ultimo valore. Es:
PHP:
$var = MultyArray( 'post:title', 'Titolo Post' );
$var = MultyArray( 'post:ID', 21 );

/* Mi restituisce solo l ultimo valore $var['post']['ID'] */
 
Scusami ce un problema ora, non posso inserire piu array nella stessa variabile mi legge solo l ultimo valore. Es:
PHP:
$var = MultyArray( 'post:title', 'Titolo Post' );
$var = MultyArray( 'post:ID', 21 );

/* Mi restituisce solo l ultimo valore $var['post']['ID'] */

Ok. Ho Modificato se si usa una funzione bisogna creare un Global altrimenti bisogna creare una classe.
PHP:
	function MultyArray( $strArray, $strValue ){
		
	    global $var;
		
	     list($first, $second)  = explode(':', $strArray, 2); 
	      
	     if( strpos($second, ':') !== false )
		 	$var[$first] = self::MultyArray( $second, $strValue );
	         #return array($first => self::MultyArray( $second, $strValue )); 
	     else 
		 	$var[$first][$second] = $strValue; 
	         #return array($first => array($second => $strValue) );
		 
		 return $var;
		 
	}

$array = MultyArray( 'post:title', 'Titolo Post' );
$array = MultyArray( 'post:ID', 21 );

/* Ecco il Risultato */
Array
(
    [post] => Array
        (
            [title] => Titolo Post
            [ID] => 21
        )

)
 
beh ovvio :D se sostituisci il valore è normale che sia così...

fai così

PHP:
 $array1 = MultyArray( 'post:author:name', 'Nome dell autore del post' );
 $array2 = MultyArray( 'post:ID', 21 );
 
 print_r( $array1 );
 print_r( $array2 );


HTML:
Array
(
    [post] => Array
        (
            [author] => Array
                (
                    [name] => Nome dell autore del post
                )

        )

)
Array
(
    [post] => Array
        (
            [ID] => 21
        )

)
 
beh ovvio :D se sostituisci il valore è normale che sia così...

fai così

PHP:
 $array1 = MultyArray( 'post:author:name', 'Nome dell autore del post' );
 $array2 = MultyArray( 'post:ID', 21 );
 
 print_r( $array1 );
 print_r( $array2 );


HTML:
Array
(
    [post] => Array
        (
            [author] => Array
                (
                    [name] => Nome dell autore del post
                )

        )

)
Array
(
    [post] => Array
        (
            [ID] => 21
        )

)

Lo so, pero mi serve come ho fatto prima.

PHP:
$array = MultyArray( 'post:title', 'Titolo Post' );
$array = MultyArray( 'post:ID', 21 );

Cmq Grazie !
 

Discussioni simili