Perl, çok boyutlu bir dizi oluşturmak için bir dizi üzerinde döngü PHP dönüştürme ve sözdizimsel yanlış

0 Cevap php

Başka bir dizi için bir dizi dönüştürme üzerinde çalışıyor. PHP, bu kolaydır, fakat Perl etrafa ve anlayış başımı almak zor bir zaman yaşıyorum bazı sözdizimi vardır.

İşte Perl benim döngü:

foreach my $r (@toindex){
    #print Dumper $r;
    %indexed{@$r[0]}{'image_id'} = @$r[0];     #Broken
    %indexed{"@$r[0]"}{'image_id'} = @$r[0];   #Broken
}

İşte benim @ toIndex dizidir

$VAR1 = [
      [
        3638584,
        'Aperture',
        'F13'
      ],
      [
        3638588,
        'Exposure Bias',
        '0 EV'
      ],
      [
        3638588,
        'Focal Length',
        '80.0 mm'
      ],
    ];

Ve burada yapmak istediğim, ancak PHP

foreach($indexrows as $k => $v){
    $indexed[$v['image_id']]['image_id'] = $v['image_id'];     
}

PHP çok çok basit görünüyor, ama Perl taşımadan benim için oldukça zor olduğunu gösteriyor.


Güncelleştirme

Bu son küçük işaretçisi ile Sinan Ünür ve DVK yardımı sayesinde, ben çalışan bir çözüm var. Herkes gelecekte yararlı bir kısmını bulabilirsiniz durumda tam komut gönderme ediyorum.

#!/usr/bin/perl
use strict; use warnings; use DBI; use Data::Dumper;

my $dbh = DBI->connect('dbi:Pg:dbname=database;host=serveraddress','user','password') or die;
my $sth;
my $sql = "SELECT id, field, data FROM table";

my $offset = 0; 
my $increment = 20;
my $toindex;

# This loop here is to solve a problem that was not part of the
# original question. I included it to illustrate the syntax for
# looping a database query
do{
    $sth = $dbh->prepare($sql . " LIMIT " . $increment . " OFFSET " . $offset);
    $sth->execute or die;
    $toindex = $sth->fetchall_arrayref;
    $offset = $offset + $increment;
}while(@$toindex == 0);

# Alternately, if you do not need a loop below is all you need
# $sth = $dbh->prepare($sql);
# $sth->execute or die;
# $toindex = $sth->fetchall_arrayref;

my %indexed;
foreach my $r ( @$toindex ) {
    #print Dumper $r;
    my ($id, $field, $value) = @$r;
    @{ $indexed{ $id } }{('image_id', $field)} = ($id, $value);
}

print Dumper %indexed; 

$dbh->disconnect;

0 Cevap