PHP Array naar C#

Status
Niet open voor verdere reacties.

mvdberg1989

Nieuwe gebruiker
Lid geworden
12 okt 2010
Berichten
4
Hallo,

Ik ben voor een familie lid een DVD beheer programma aan het maken alleen zit ik nu even met een probleem.

PHP:
while ($aRow = $oRes->fetchAssoc()) 
{
    if (!isset($aMovies[$aRow['movie_id']]))
    {
        $aMovies[$aRow['movie_id']] = array(
            'movie_id' => $aRow['movie_id'],
            'movie_title' => $aRow['movie_title'],
        );
    }
    if (!empty($aRow['genre_id'])) 
    {
        $aMovies[$aRow['movie_id']]['movie_genre'][$aRow['genre_id']] = array(
            'genre_id' => $aRow['genre_id'],
            'genre_name' => $aRow['genre_name']
        );
    }
}

Nu wil ik dus iets soort gelijkt krijgen als dat mogelijk is, alleen ik krijg dit dus niet voor elkaar.

Ik heb al een klein deel namelijk

Code:
public class Movie
    {
        // change the data types as per your needs
        public Movie(string movieId, string name)
        {
            _movieId = movieId;
            _name = name;
        }

        private string _movieId;
        public string MovieId
        {
            get { return _movieId; }
            set { _movieId = value; }
        }

        private string _name;
        public string Name
        {
            get { return _name; }
            set { _name = value; }
        }
    }
    public class Movies :List<Movie>
    {
    }

    class Program
    {
        static void Main(string[] args)
        {
            Movies movies = new Movies(); 
            // this is how you can add information  
            // within the loop as per your need
            movies.Add(new Movie("1", "End of Days"));
        }
    }

Alleen wat ik dus niet kan krijgen is dat als ik een film toevoeg aan deze list dat de film ook meerdere genre's kan hebben.

Als iemand mij hierbij kan helpen zou geweldig zijn.

BVB Dank
 
Het is niet PHP in combinatie met C#, ik moet een soort gelijke oplossing vinden in C# voor die PHP Array.

Ik hoop dat dit zo beetje duidelijker is.
 
Code:
public class Movie
    {
        // change the data types as per your needs
        public Movie(string movieId, string name, [COLOR="red"]string[] genre[/COLOR])
        {
            _movieId = movieId;
            _name = name;
            _genre = genre
        }

        private string _movieId;
        public string MovieId
        {
            get { return _movieId; }
            set { _movieId = value; }
        }

        private string _name;
        public string Name
        {
            get { return _name; }
            set { _name = value; }
        }
       [COLOR="red"] private string[] _genre
        public string[] Genre
        {
           get { return _genre; }
           set { _genre = value; }
        }[/COLOR]
    }

Dit is een 'snelle' oplossing. Een stringArray aan de Movie class meegeven. je kan ook een list met strings gebruiken. List is waarschijnlijk verstandiger omdat je daar een .add op aan kan roepen
Een andere optie is een aparte Genre class maken waar al je genre's in staan. Deze dan in middels een List in de constructor van de Movie class zetten net zoals nu met de string[] is gebeurt
 
Laatst bewerkt:
Daar had ik zelf nog niet eens aan gedacht, een StringArray, maar ik heb het erbij ingeplant en heb gelijk ook even wat verder uitgebreid, maar daar heb ik ook weer een vraag over. Maar kan ik dat gewoon hier blijven door vragen of moet ik een nieuw topic aanmaken?
 
Geweldig :thumb:, Ik heb dus nu als volgt

Code:
public class Movies : List<MovieDetails>
{ }

public class Movie
{
    private int _id;
    private int _nr;
    private string _title;

    public int Id
    {
        get { return _id; }
        set { _id = value; }
    }

    public int Nr
    {
        get { return _nr; }
        set { _nr = value; }
    }

    public string Title
    {
        get { return _title; }
        set { _title = value; }
    }

    public Movie(int Id, int Nr, string Title)
    {
        _id = Id;
        _nr = Nr;
        _title = Title;
    }
}

public class MovieDetails : Movie
{
    private string _originalTitle;
    private string _studio;
    private int _runtime;
    private DateTime _releaseDate;
    private int _productionYear;
    private float _rating;
    private float _IMDbRating;
    private string _website;
    private string _IMDbWebsite;
    private string _plot;
    private string _summary;
    private string _notes;
    private string[] _genres;
    private string[] _actors;

    public string OriginalTitle
    {
        get { return _originalTitle; }
        set { _originalTitle = value; }
    }
        
    public string Studio
    {
        get { return _studio; }
        set { _studio = value; }
    }

    public int Runtime
    {
        get { return _runtime; }
        set { _runtime = value; }
    }

    public DateTime ReleaseDate
    {
        get { return _releaseDate; }
        set { _releaseDate = value; }
    }

    public int ProductionYear
    {
        get { return _productionYear; }
        set { _productionYear = value; }
    }

    public float Rating
    {
        get { return _rating; }
        set { _rating = value; }
    }

    public float IMDbRating
    {
        get { return _IMDbRating;  }
        set { _IMDbRating = value; }
    }

    public string Plot
    {
        get { return _plot; }
        set { _plot = value; }
    }

    public string Summary
    {
        get { return _summary; }
        set { _summary = value; }
    }

    public string Notes
    {
        get { return _notes; }
        set { _notes = value; }
    }

    public string[] Genres
    {
        get { return _genres; }
        set { _genres = value; }
    }

    public string[] Actors
    {
        get { return _actors; }
        set { _actors = value; }
    }


    public MovieDetails(int Id, int Nr, string Title, string OriginalTitle, string Studio, int Runtime, DateTime ReleaseDate, 
        int ProductionYear, float Rating, float IMDbRating, string Website, string IMDbWebsite, string Plot, string Summary, 
        string Notes, string[] Genres, string[] Actors) : base(Id, Nr, Title)
    {
        _originalTitle = OriginalTitle;
        _studio = Studio;
        _runtime = Runtime;
        _releaseDate = ReleaseDate;
        _productionYear = ProductionYear;
        _rating = Rating;
        _IMDbRating = IMDbRating;
        _website = Website;
        _IMDbWebsite = IMDbWebsite;
        _plot = Plot;
        _summary = Summary;
        _notes = Notes;
        _genres = Genres;
        _actors = Actors;
    }
}

Nu is dus mijn bedoeling om alle dvd's/films die in mijn database staan dus in de Class Movies te zetten en daarna vervolgens in een ViewList te plaatsen.

Nu denk ik dat ik via een while loop dus de gegevens uit mijn db moet halen, alleen is hier geen makkelijkere manier voor? want nu zou hij dus dan elke keer na opstarten van de applicatie de db laden in mijn Class Movies, en dan vervolgens alles nog een keer laden in mijn ViewList. Wordt hierdoor dan de applicatie niet traag bij opstarten?

Voor het vullen van mijn ViewList gebruik ik deze code (Tijdelijk/Testen)
Code:
private void FillViewList()
{
    Movies moviesList = new Movies();
    moviesList.Add(new MovieDetails(1, 100, "Test Titel", "", "", 120, DateTime.Now, 2011, 5, 5, "", "", "Blaaaat plot", "", "", new string[] { "Horror, Actie, Avontuur" }, new string[] { "Mila Jocovich" }));
    moviesList.Add(new MovieDetails(2, 100, "DVD Deel 2", "", "", 93, DateTime.Now, 2011, 0, 5, "", "", "Lorum Ipsum enzo", "", "", new string[] { "Horror, Actie, Avontuur" }, new string[] { "Mila Jocovich" }));

    foreach (MovieDetails mov in moviesList)
    {
        ListViewItem lvitem = new ListViewItem(mov.Title);
        lvitem.Tag = mov.Id;
        lvitem.SubItems.Add(mov.Runtime.ToString());
        lvitem.SubItems.Add(mov.ProductionYear.ToString());
        lvitem.SubItems.Add(mov.Plot);
        lvitem.SubItems.Add(string.Join(", ", mov.Genres));
        lvitem.SubItems.Add(mov.Nr.ToString());
        lvMovies.Items.Add(lvitem);
    }
}

Alleen hier heb ik dus dat ik (zie onderstaande code) moet aan roepen anders ziet hij hem niet in de foreach.
Code:
Movies moviesList = new Movies();
Maar als ik dat doe dan maakt hij elke keer nieuwe instance aan van Movies waardoor ik dus niet bij de gevulde Movies kan komen.

Dus eigenlijk heb ik meerdere vragen, De prestaties van deze methode(s) met name open uit db en dan vullen van de list, hoe ik ik dit dan het makkelijkst voor elkaar zou kunnen krijgen, en over het aanroepen van mijn list.

Ik gebruik Microsoft SQL Server 2008 Express als Database en mijn Classes Movies, Movie, MovieDetails zitten in een aparte ClassLibrary.

Als nog niet duidelijk is vraag gerust.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan