---
title: "Ersätta lång if-sats med nåt smart array-trick?"
type: "forum-thread"
url: "https://www.webforum.nu/amne/php/151576-ersätta-lång-if-sats-med-nåt-smart-array-trick"
topic: "PHP"
topic_url: "https://www.webforum.nu/amne/php"
author: "Bjuufaren"
published: "2006-09-21T13:23:22.000Z"
updated: "2006-09-28T21:22:37.000Z"
replies: 5
views: 650
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/php/151576-ersätta-lång-if-sats-med-nåt-smart-array-trick"
---

# Ersätta lång if-sats med nåt smart array-trick?

## #1 — Bjuufaren, 2006-09-21T13:23Z

Hej PHP-hackare! Finns det något sätt att förenkla detta uttryck? Känns som det borde gå att undvika en lång if-else-if-listning men hur jag än vrider och vänder på det så får jag inte till det. Förslag?

```php
$arr = array(0=>0, 1=>1201, 2=>3943, 3=>8600, 4=>12932); // värdena här är av mindre intresse, men de är i stigande ordning

if ($x > $arr[4]) {
	return 4;
} else if ($x > $arr[3]) {
	return 3;
} else if ($x > $arr[2]) {
	return 2;
} else if ($x > $arr[1]) {
	return 1;
} else {
	return 0;
}
```

Permalänk: https://www.webforum.nu/p/151576

## #2 — jawbreaker, 2006-09-21T16:21Z

Har du någon anledning till att du skickar in 0, 1, 2, 3 och 4 (alltså värdenas positioner) till din array, eller kommer de alltid bara att räknas uppåt? Om de bara ska räknas från 0 och uppåt kan du skippa dem.

```php
$arr = array(0, 1201, 3943, 8600, 12932);

$cnt = count($arr);
for ($i = $cnt - 1; $i >= 0; $i--)
{
	if ($x > $arr[$i])
		return $i;
}

return 0;
```

Permalänk: https://www.webforum.nu/p/1870529

## #3 — plup, 2006-09-21T18:41Z

ännu enklare med en foreach sats

Permalänk: https://www.webforum.nu/p/1870578

## #4 — salkciN, 2006-09-21T19:05Z

ex:

```php
$arr = array(0, 1201, 3943, 8600, 12932);

foreach ($arr as $key => $value) {

	if ($x > $value) echo $key;

}
```

Permalänk: https://www.webforum.nu/p/1870595

## #5 — Moberg, 2006-09-27T00:22Z

salkciN: Men den är väl inte "baklänges"?

Permalänk: https://www.webforum.nu/p/1874854

## #6 — aasah, 2006-09-28T21:22Z

> **Moberg skrev:**
>
> salkciN: Men den är väl inte "baklänges"?

Nej. Den kommer dessutom att skriva ut 
01234
om $x \> sista talet.

> **jawbreaker skrev:**
>
> ```php
> $arr = array(0, 1201, 3943, 8600, 12932); 
> 
> $cnt = count($arr); 
> for ($i = $cnt - 1; $i >= 0; $i--) 
> { 
>     if ($x > $arr[$i]) 
>         return $i; 
> } 
> 
> return 0;
> ```

För att kunna särskilja om $x är större eller mindre än första värdet i arrayen bör det nog stå:

```php
$arr = array(0, 1201, 3943, 8600, 12932); 

$cnt = count($arr); 
for ($i = $cnt - 1; $i >= 0; $i--) 
{ 
    if ($x > $arr[$i]) 
        return $i; 
} 

return -1;
```

0 kan annars betyda två saker....

Permalänk: https://www.webforum.nu/p/1875547

---

Tråden på webben: https://www.webforum.nu/amne/php/151576-ersätta-lång-if-sats-med-nåt-smart-array-trick
