2

I have an array thas has other arrays inside and I wanro to delete the elements that have the key "PTemp_C_Avg"

try doing it by creating a function that go through the original array and eliminate the key that is assigned (PTemp_C_Avg, in this case). However, this dosen´t remove the specific element.

//arrProvAvg array
Array
(
[0] => Array
    (
        [PTemp_C_Avg] => 17.28
        [T0_10cm_Avg] => 22.58
        [T1_1m_Avg] => 27.91
        [T2_2m_Avg] => 31.95
        [T3_3m_Avg] => 36.32
        [T4_4m_Avg] => 41.73
        [T5_5m_Avg] => 45.78
        [T6_6m_Avg] => 48.55
        [T7_7m_Avg] => 53.48
        [T7_5_7_5m_Avg] => 47.82
    )

[1] => Array
    (
        [PTemp_C_Avg] => 14.2
        [T0_10cm_Avg] => 20.94
        [T1_1m_Avg] => 27.36
        [T2_2m_Avg] => 32.12
        [T3_3m_Avg] => 36.33
        [T4_4m_Avg] => 41.4
        [T5_5m_Avg] => 46.58
        [T6_6m_Avg] => 48.8
        [T7_7m_Avg] => 52.69
        [T7_5_7_5m_Avg] => 48.9
    )

[2] => Array
    (
        [PTemp_C_Avg] => 11.83
        [T0_10cm_Avg] => 20.23
        [T1_1m_Avg] => 26.9
        [T2_2m_Avg] => 32.39
        [T3_3m_Avg] => 36.95
        [T4_4m_Avg] => 41.48
        [T5_5m_Avg] => 46.41
        [T6_6m_Avg] => 48.82
        [T7_7m_Avg] => 52.58
        [T7_5_7_5m_Avg] => 49.42
    )

)


function eliminaClave($arrOriginal, $key){
    foreach($arrOriginal as $clave => $valor){
        foreach($valor as $c => $v){
            unset($v[$key]);
        }
    }
    return $arrOriginal;
}

//Call the eliminaClave function
$arrPromAvg = eliminaClave($arrPromAvg, "PTemp_C_Avg");

This is output that I expet

 Array
(
[0] => Array
    (
        [T0_10cm_Avg] => 22.58
        [T1_1m_Avg] => 27.91
        [T2_2m_Avg] => 31.95
        [T3_3m_Avg] => 36.32
        [T4_4m_Avg] => 41.73
        [T5_5m_Avg] => 45.78
        [T6_6m_Avg] => 48.55
        [T7_7m_Avg] => 53.48
        [T7_5_7_5m_Avg] => 47.82
    )

[1] => Array
    (
        [T0_10cm_Avg] => 20.94
        [T1_1m_Avg] => 27.36
        [T2_2m_Avg] => 32.12
        [T3_3m_Avg] => 36.33
        [T4_4m_Avg] => 41.4
        [T5_5m_Avg] => 46.58
        [T6_6m_Avg] => 48.8
        [T7_7m_Avg] => 52.69
        [T7_5_7_5m_Avg] => 48.9
    )

[2] => Array
    (
        [T0_10cm_Avg] => 20.23
        [T1_1m_Avg] => 26.9
        [T2_2m_Avg] => 32.39
        [T3_3m_Avg] => 36.95
        [T4_4m_Avg] => 41.48
        [T5_5m_Avg] => 46.41
        [T6_6m_Avg] => 48.82
        [T7_7m_Avg] => 52.58
        [T7_5_7_5m_Avg] => 49.42
    )

)

The element with the "PTemp_C_Avg" has been removed

3 Answers 3

2

How about with a single foreach() and unset()?

function eliminaClave($arrOriginal, $key){
    foreach($arrOriginal as $clave => $valor){
        unset($valor['PTemp_C_Avg']);
        $arrOriginal[$clave] = $valor;  
    }
    return $arrOriginal;
}
Sign up to request clarification or add additional context in comments.

Comments

1

Here is without loop,

function eliminaClave($arr, $key)
{
    return array_map(function ($item) use ($key) {
        unset($item[$key]); // unsetting elements
        return $item; // saving back changed item
    }, $arr);
}

Demo.

Comments

0

you don't need the 2nd foreach..

<?php

$a[0]['PTemp_C_Avg']='1';
$a[0]['foo']='1';

$a[1]['PTemp_C_Avg']='2';
$a[1]['foo']='1';


foreach($a as $k=> $b){

    unset($a[$k]['PTemp_C_Avg']);
}

print_r($a);

output:

Array (
    [0] => Array
        (
            [foo] => 1
        )

    [1] => Array
        (
            [foo] => 1
        )

)

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.