Lokiyou
Lokiyou

Reputation: 1

Last value condition foreach in array?

I have an array like that:

 [0] => Array
    (
        [sendby] => 3
        [refresh] => 0
        [last] => 0
    )

[1] => Array
    (
        [sendby] => 3
        [refresh] => 1
        [last] => 1
    )

[2] => Array
    ( 
        [sendby] => 8
        [refresh] => 1
        [last] => 1
    )

I want the value last to be 1 when the value sendby (here 3 and 8) is the last of the entire array! How can I do that?

Upvotes: 0

Views: 76

Answers (4)

Sunil Kumar Sain
Sunil Kumar Sain

Reputation: 105

$count = count($arr) ;

$i = 0;

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

if(++$I === $count) {

 echo "last element" ;

}

}

Upvotes: 0

splash58
splash58

Reputation: 26153

Get the last 2 value and compare with array [3,8]

// get array of sendby values
$temp =  array_column($array, 'sendby');
// get array with two last values
$temp =  array_slice($temp, -2);
// Check
if ($temp == [3,8])  {
   $value = 1;
}
else {
   $value = 0;
} 

or in one line

$value = array_slice(array_column($array, 'sendby'), -2) == [3,8] ? 1 : 0;

demo

Update on base of comments

// get array with two last values
$temp = array_slice(array_column($array, 'sendby'), -2);

foreach($array as &$x) {
  // If current send by is in $temp array
  if(in_array($x['sendby'], $temp)) {
    $x['last'] = 1;
  }
  else {
    $x['last'] = 0;
  }
}

print_r($array);

Upvotes: 2

Simos Fasouliotis
Simos Fasouliotis

Reputation: 1390

Lets suppose your array is $array; You could iterate through it and if it's the last element, then set [last] to 1, else set to 0;

Try to run the below code after your array is populated.

$i =1;
foreach($array as $ar) {
    $ar->last = ($i == count($array) && ($ar->sendby == 3 || $ar->sendby == 8)) ?  1 : 0;
    $i++;
}

Upvotes: 0

César Ferreira
César Ferreira

Reputation: 681

You can use an array to assist the existing ocurrences of that id. I have an working example (Tested on php sandbox):

$array =  array(
    0 => array
    (

        'sendby' => 3,
        'refresh' => 0,
    ),

    1 => array
    (

        'sendby' => 3,
        'refresh' => 1,
    ),

    2 => array
    (

        'sendby' => 8,
        'refresh' => 1,
    )
);  

$ocurrences = [];

foreach($array as $key => $elem ){
    $id = $elem['sendby'];

    if (isset($ocurrences[$id])) {
        $array[$ocurrences[$id]]['last'] = 0;
        $array[$key]['last'] = 1;
        $ocurrences[$id] =  $key;
    } else {
       $ocurrences[$id] = $key;
       $array[$key]['last'] = 1;
    }
}

echo print_r($array, 1);

The result:

Array
(
    [0] => Array
        (
            [sendby] => 3
            [refresh] => 0
            [last] => 0
        )

    [1] => Array
        (
            [sendby] => 3
            [refresh] => 1
            [last] => 1
        )

    [2] => Array
        (
            [sendby] => 8
            [refresh] => 1
            [last] => 1
        )

)

Basically I used an array with the ocurrences of the 'sendby' index of the array. The $occurences array has the elements with the key of the last checked element.

Upvotes: 1

Related Questions