Rechercher tous les éléments de navigation:

$navitems_locations_array = array_unique(array_column($projects, 'location'));
asort($navitems_locations_array);

Cela fonctionne sur mon hôte local mais pas en direct. Mon serveur ne le prend pas en charge. Et j'utilise une version inférieure de PHP.

Et voici l'erreur:

Erreur fatale: appel à la fonction non définie array_column ()

Une alternative avec la même sortie?

Voici mon exemple de tableau:

Array( [ name ] => P1 [ description ] => Lorem Ipsum [ location ] => air city[ type ] => high rise[ status ] => new [ tags ] => [ page_url ] => project-1[ image ] => projects/images/p1/project-image.jpg[ timeline ] => )

0
c.k 21 avril 2017 à 05:58

3 réponses

Meilleure réponse

Ajoutez votre propre fonction array_column si votre version de PHP ne la prend pas en charge:

if (!function_exists('array_column')) {
function array_column($input = null, $columnKey = null, $indexKey = null)
{
    $argc = func_num_args();
    $params = func_get_args();

    if ($argc < 2) {
        trigger_error("array_column() expects at least 2 parameters, {$argc} given", E_USER_WARNING);
        return null;
    }

    if (!is_array($params[0])) {
        trigger_error(
            'array_column() expects parameter 1 to be array, ' . gettype($params[0]) . ' given',
            E_USER_WARNING
        );
        return null;
    }

    if (!is_int($params[1])
        && !is_float($params[1])
        && !is_string($params[1])
        && $params[1] !== null
        && !(is_object($params[1]) && method_exists($params[1], '__toString'))
    ) {
        trigger_error('array_column(): The column key should be either a string or an integer', E_USER_WARNING);
        return false;
    }

    if (isset($params[2])
        && !is_int($params[2])
        && !is_float($params[2])
        && !is_string($params[2])
        && !(is_object($params[2]) && method_exists($params[2], '__toString'))
    ) {
        trigger_error('array_column(): The index key should be either a string or an integer', E_USER_WARNING);
        return false;
    }

    $paramsInput = $params[0];
    $paramsColumnKey = ($params[1] !== null) ? (string) $params[1] : null;

    $paramsIndexKey = null;
    if (isset($params[2])) {
        if (is_float($params[2]) || is_int($params[2])) {
            $paramsIndexKey = (int) $params[2];
        } else {
            $paramsIndexKey = (string) $params[2];
        }
    }

    $resultArray = array();

    foreach ($paramsInput as $row) {
        $key = $value = null;
        $keySet = $valueSet = false;

        if ($paramsIndexKey !== null && array_key_exists($paramsIndexKey, $row)) {
            $keySet = true;
            $key = (string) $row[$paramsIndexKey];
        }

        if ($paramsColumnKey === null) {
            $valueSet = true;
            $value = $row;
        } elseif (is_array($row) && array_key_exists($paramsColumnKey, $row)) {
            $valueSet = true;
            $value = $row[$paramsColumnKey];
        }

        if ($valueSet) {
            if ($keySet) {
                $resultArray[$key] = $value;
            } else {
                $resultArray[] = $value;
            }
        }

    }

    return $resultArray;
}

}

Référence:

0
Akshay Hegde 21 avril 2017 à 04:04

Essayez cet espoir que cela vous aidera. Ici, nous utilisons array_map pour collecter des emplacements.

$locations=array();

array_map(function($value) use (&$locations) {
    $locations[]=$value["location"];//we are gathering index location
},  $yourArray);//add your array here in place of $yourArray.

print_r(array_unique($locations));
2
Sahil Gulati 21 avril 2017 à 03:19

Il est généralement utile de lire les Notes contribuées par l’utilisateur dans le Manuel PHP.

Par exemple, sous l'article array_column, il y en a plusieurs variantes d'implémentations pour les versions inférieures à PHP 5.5. Voici le plus populaire:

if(!function_exists("array_column"))
{

    function array_column($array,$column_name)
    {

        return array_map(function($element) use($column_name){return $element[$column_name];}, $array);

    }

}

Mais il ne prend pas en charge $index_key, vous pouvez donc trouver un autre là-bas, qui fait:

if (!function_exists('array_column')) {
    function array_column($input, $column_key, $index_key = null) {
        $arr = array_map(function($d) use ($column_key, $index_key) {
            if (!isset($d[$column_key])) {
                return null;
            }
            if ($index_key !== null) {
                return array($d[$index_key] => $d[$column_key]);
            }
            return $d[$column_key];
        }, $input);

        if ($index_key !== null) {
            $tmp = array();
            foreach ($arr as $ar) {
                $tmp[key($ar)] = current($ar);
            }
            $arr = $tmp;
        }
        return $arr;
    }
}

Vous pouvez trouver quelques autres alternatives dans les Notes contributives des utilisateurs .

0
sevavietl 21 avril 2017 à 08:04