Visualizzazione dei risultati da 1 a 8 su 8
  1. #1

    Clonare array di oggetti

    Salve,

    se io ho un array chiave->valori dove i valori sono oggetti, come posso duplicare l'array (e quindi gli oggetti) in maniera da poter svolgere delle operazioni sul duplicato senza modificare gli oggetti nel primo? La realtà è che mi andrebbe poco di scorrermi tutto l'array (fortunatamente monodimensionale) e chiamare clone su tutti quanti, mi chiedevo se ci fosse una funziona già pronta.

    Thanks
    IP-PBX management: http://www.easypbx.it

    Old account: 2126 messages
    Oldest account: 3559 messages

  2. #2
    santino apre un topic per chiedere una cosa è la fine di un mito... XD
    http://www.miniscript.it
    Se ti sono stato di aiuto in qualche modo in questo forum iscriviti alla fan page di Miniscript - il mio blog di programmazione web.

  3. #3
    Originariamente inviato da oly1982
    santino apre un topic per chiedere una cosa è la fine di un mito... XD


    cercavo un modo più compatto di scrivere:

    Codice PHP:

    $objects 
    = array('chiave' => array('chiave' => 'oggetto', ... ));

    $clone = array();

    foreach(
    $objects as $k1 => $values){
       
    $clone[$k1] = array();

       foreach(
    $objects[$k1] as $k2 => $object)
            
    $clone[$k1][$k2] = clone $object;


    che era un pò bruttarello...


    EDIT: e cmq ne apro tantissimi di topic io... solo che non mi risponde quasi mai nessuno
    IP-PBX management: http://www.easypbx.it

    Old account: 2126 messages
    Oldest account: 3559 messages

  4. #4
    Non avevi detto che era monodimensionale?

    Comunque invece dei cicli puoi usare clone con array_map().

  5. #5
    Originariamente inviato da k.b
    Non avevi detto che era monodimensionale?
    mi ricordavo male

    Originariamente inviato da k.b
    Comunque invece dei cicli puoi usare clone con array_map().
    già... mi toccherà... certo se avesse funzionato clone sugli array sarebbe stato stupendo, ma non si può avere tutto nella vita...
    IP-PBX management: http://www.easypbx.it

    Old account: 2126 messages
    Oldest account: 3559 messages

  6. #6
    array_map non andava bene perchè a me serviva anche la key dell'elemento, andava bene array_walk invece:

    Codice PHP:

    $clone 
    = array();
            
            
    $cloneCallback = function($value$parentKey) use (&$clone){
                
                
    $clone[$parentKey] = array();
                
                
    array_walk($value,function($value,$key,$parentKey) use (&$clone){
                    
    $clone[$parentKey][$key] = clone $value;
                },
    $parentKey);
                
            };
            
            
    array_walk($this->getControllers(),$cloneCallback);
            
            
    print_r($clone); 
    dove $this->getControllers() ritorna un'array del tipo

    codice:
    Array(
    
        'chiaveAlfaNum' => array( 
    
                        'chiaveAlfaNum2' => obj,
                        'chiaveAlfaNum3' => obj2,
                        .... )
        ...
    )
    dovrei provare ad usare array_walk_recursive, ma mi sa che non riuscirei a portarmi dietro la parentKey di riferimento... ci proverò
    IP-PBX management: http://www.easypbx.it

    Old account: 2126 messages
    Oldest account: 3559 messages

  7. #7
    Moderatore di Windows e software L'avatar di URANIO
    Registrato dal
    Dec 1999
    residenza
    Casalpusterlengo (LO)
    Messaggi
    1,287
    Solitamente si chiama DeepCloning (almeno in .net)
    Codice PHP:
    protected function deepCopy($object){ 
             return 
    unserialize(serialize($object)); 

    Da http://php.net/manual/en/language.oop5.cloning.php
    E QUASI tutti usano la serializzazione deserializzazione dell'oggetto.
    Poi dipende dall'oggetto, probabilmente esistono anche in PHP le interfacce IClonable o simili

  8. #8
    grandissimo, ottimo suggerimento!
    IP-PBX management: http://www.easypbx.it

    Old account: 2126 messages
    Oldest account: 3559 messages

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.