Προς το περιεχόμενο

PHP: αντίστοιχη array_slice σε object - διόρθωση function


philos

Προτεινόμενες αναρτήσεις

Δημοσ. (επεξεργασμένο)

Με λίγη έρευνα στο διαδίκτυο έχω φτιάξει την εξής class method που θέλω να κάνει ό,τι κάνει και η array_slice, αλλά σε object (το οποίο δεν θέλω να το μετατρέψω σε (array) $obj, για χρήση στην array_slice()).

	protected function object_slice($obj, $startPosition, $perPage, $page)
	{
		if ($page == 1)
		{
			$startPosition = $startPosition - 1;
		}

		$output = [];
		if ($obj)
		{
			$i = -1;
			foreach ($obj AS $j)
			{
				$i++;
				if ($i < $startPosition)
				{
					continue;
				}
				
				if ($i > $startPosition + $perPage)
				{
					break;
				}
				
				$output[] = $j;
				
				
			}
		}
		
		return $output;
	}

Ας πούμε με σύνολο 6 στοιχεία, αν βάλω perPage = 2, θα έχω 3 σελίδες. Το πρόβλημα είναι ότι στη 2η σελίδα βλέπω 3 στοιχεία (λάθος) και παράλληλα στην 1η και την 3η σελίδα 2 στοιχεία (σωστό). Άρα κάτι λάθος παίζει στη 2η σελίδα, η οποία θα έπρεπε να δείχνει 2 στοιχεία (το ένα έξτρα στοιχείο το βλέπω και στη 3η σελίδα).

Με 6 στοιχεία, αν βάλω perPage = 3, βλέπω κανονικά 2 σελίδες με 3 στοιχεία η καθεμία (σωστό).

Άρα μια μικρή διορθωσούλα θα τη θέλει. Ο πιο main κώδικας που τρέχει είναι ο εξής:

		$startPosition = ($page - 1) * $perPage;
		$nodeTree = $this->object_slice($nodeTree, $startPosition, $perPage, $page);		

Βλέπετε κάτι; :)

Επεξ/σία από philos
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

ok το βρήκα on my own!

Τελικό:

	protected function object_slice($obj, $startPosition, $perPage, $page)
	{
		$output = [];
		if ($obj)
		{
			$i = -1;
			foreach ($obj AS $j)
			{
				$i++;
				if ($i < $startPosition)
				{
					continue;
				}
				
				if ($i >= $startPosition + $perPage)
				{
					break;
				}
				
				$output[] = $j;
				
				
			}
		}
		
		return $output;
	}

 

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...