🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.lang.php
Article #231239

jak usunąć (unset) element tablicy tablic

#231239
From: jivanmukta
Date: Mon, 14 Mar 2016 19:49
31 lines
3306 bytes
Mam na zmiennej $a tablicę rekordów z bazy danych, czyli inaczej $a to tablica tablic. Potrzebuję usunąć powtarzające się rekordy (duplikaty). W tym celu sortuję (asort) tablicę a potem wywołuję moją funkcję removeDuplicates. Problem w tym, że pomimo usuwania (unset) elementów-rekordów nie znikają one z tablicy $a. Całość wygląda tak:

function removeDuplicates(array &$a) {  // $a musi być posortowana
    $prev = NULL;
    $toUnset = array();
    foreach ($a as $i => &$r) {
        if ($prev['announcement_year'] == $r['announcement_year'] &&
            $prev['announcement_month'] == $r['announcement_month'] &&
            $prev['announcement_no'] == $r['announcement_no']) {
echo 'unset:',$prev['announcement_year'],' ',$prev['announcement_month'],' ',$prev['announcement_no'];echo '<br>';
            unset($prev);
        }
        $prev =& $r;
    }
}
$a = array(array('announcement_year'=>2011,'announcement_month'=>7,'announcement_no'=>2),
array('announcement_year'=>2012,'announcement_month'=>3,'announcement_no'=>5),
array('announcement_year'=>2011,'announcement_month'=>7,'announcement_no'=>2));
asort($a);
echo 'a before:';var_dump($a);echo '<br>';
removeDuplicates($a);
echo 'a after:';var_dump($a);

Wynikiem działania jest:

a before:array(3) { [0] => array(3) { 'announcement_year' => int(2011) 'announcement_month' => int(7) 'announcement_no' => int(2) } [2] => array(3) { 'announcement_year' => int(2011) 'announcement_month' => int(7) 'announcement_no' => int(2) } [1] => array(3) { 'announcement_year' => int(2012) 'announcement_month' => int(3) 'announcement_no' => int(5) } }
unset:2011 7 2
a after:array(3) { [0] => array(3) { 'announcement_year' => int(2011) 'announcement_month' => int(7) 'announcement_no' => int(2) } [2] => array(3) { 'announcement_year' => int(2011) 'announcement_month' => int(7) 'announcement_no' => int(2) } [1] => array(3) { 'announcement_year' => int(2012) 'announcement_month' => int(3) 'announcement_no' => int(5) } } 

czyli wywołało się unset dla rekordu 2011 7 2. Jednak nie został on usunięty z tablicy.
Jak to poprawnie zrobić? Byłym wdzięczny za pomoc.
Technical Details
Message-ID: <d2e90009-5bab-4546-b3a8-42c94f6e9c96@googlegroups.com>
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed.pionier.net.pl!feeder.erje.net!2.us.feeder.erje.net!news.glorb.com!nt3no1679735igb.0!news-out.google.com!k1ni18682igd.0!nntp.google.com!av4no603329igc.0!postnews.google.com!glegroupsg2000goo.googlegroups.com!not-for-mail

Show Full Headers
Complete Article Headers
X-Received: by 10.98.42.67 with SMTP id q64mr16652305pfq.9.1457984977093;        Mon, 14 Mar 2016 12:49:37 -0700 (PDT)
X-Received: by 10.50.109.230 with SMTP id hv6mr320970igb.2.1457984977049; Mon, 14 Mar 2016 12:49:37 -0700 (PDT)
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed.pionier.net.pl!feeder.erje.net!2.us.feeder.erje.net!news.glorb.com!nt3no1679735igb.0!news-out.google.com!k1ni18682igd.0!nntp.google.com!av4no603329igc.0!postnews.google.com!glegroupsg2000goo.googlegroups.com!not-for-mail
Newsgroups: pl.comp.lang.php
Date: Mon, 14 Mar 2016 12:49:36 -0700 (PDT)
Complaints-To: groups-abuse@google.com
Injection-Info: glegroupsg2000goo.googlegroups.com; posting-host=89.72.94.100; posting-account=Y8V58QoAAACtLuF8lEt8MaiUjYUTCWP6
NNTP-Posting-Host: 89.72.94.100
User-Agent: G2/1.0
MIME-Version: 1.0
Message-ID: <d2e90009-5bab-4546-b3a8-42c94f6e9c96@googlegroups.com>
Subject: jak usunąć (unset) element tablicy tablic
From: jivanmukta@poczta.onet.pl
Injection-Date: Mon, 14 Mar 2016 19:49:37 +0000
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit