Current File : /pages/54/47/d0016649/home/htdocs/ob_maxi/wp-content/plugins/digimember/system/helper/array.php
<?php

function ncore_explodeKeyValuePairs( $params ) {

	$result=array();

	foreach (explode("\n", $params) as $line)
	{
		$line = trim($line);

		if ($pos=strpos($line,'='))
		{
			$key = substr($line, 0, $pos);
			$value = substr($line, $pos+1);
			$result[ $key ] = $value;
		}
	}
	return $result;
}


function ncore_elementsWithKey($array, $key, $value, $keep_keys=false )
{
	$result = array();

	foreach ($array as $index => $one)
	{
		$one_value = ncore_retrieve($one, $key);

		$matches = $one_value == $value;

		if ($matches)
		{
			if ($keep_keys)
			{
                $result[$index] = $one;
			}
			else
			{
                $result[] = $one;
			}
		}
	}
	return $result;
}

function ncore_findByKey($array, $key, $value, $default=false)
{
    $found = ncore_elementsWithKey( $array, $key, $value );

    return $found
           ? $found[0]
           : $default;
}

function ncore_indexOfByKey($array, $key, $value)
{
	foreach ($array as $index => $one)
	{
		$one_value = ncore_retrieve($one, $key);
		$cmp_value = $value;

		$both_numeric = is_numeric( $one_value ) && is_numeric( $cmp_value );
		if ($both_numeric)
		{
			$one_value += 0;
			$cmp_value += 0;
		}

		$matches = $one_value === $cmp_value;

		if ($matches)
		{
			return $index;
		}
	}

	return false;
}

function ncore_retrieveValues( $list, $key_column ) {

    $result = array();

    foreach ($list as $element) {
        $value =  ncore_retrieve( $element, $key_column );
        $result[] = $value;
    }
    return $result;
}

function ncore_listToArray( $list, $key_column, $value_column, $optgroup_column = false )
{
	$result = array();

    $current_optgroup = false;
    $optgroup_count   = 0;

	foreach ($list as $index => $element)
	{
        if ($optgroup_column) {
            $optgroup = ncore_retrieve( $element, $optgroup_column, false );
            if ($optgroup && $current_optgroup != $optgroup)
            {
                $optgroup_count++;
                $result[ "optgroup_$optgroup_count"] = $optgroup;
                $current_optgroup = $optgroup;
            }
        }

		$key = $key_column==='use_index'
               ? $index
               : ncore_retrieve( $element, $key_column );

		$value = ncore_retrieve( $element, $value_column );

		$result[ $key ] = $value;
	}

	return $result;
}

function ncore_listToArraySorted( $list, $key_column, $value_column )
{
	$strtolower = function_exists( 'mb_strtolower' )
				? 'mb_strtolower'
				: 'strtolower';

	$keys = array();
	$values = array();
	$sort = array();
	foreach ($list as $element)
	{
		$keys[] = ncore_retrieve( $element, $key_column );

		$value = ncore_retrieve( $element, $value_column );;
		$values[] = $value;
		$sort[] = $strtolower( $value );
	}

	array_multisort( $sort, $values, $keys );

	$result = array();
	foreach ($keys as $index => $key)
	{
		$result[ $key ] = $values[$index];
	}
	return $result;
}

function ncore_simpleMapExplode( $value )
{
	$values = array();
	while ($value)
	{
	   if ($value[0] === ',')
	   {
		   $value = substr( $value, 1 );
		   if (!$value)
		   {
			   break;
		   }
	   }

		$pos = strpos( $value, ':' );
		$id = substr( $value, 0, $pos );
		$value = substr( $value, $pos+1 );

		$have_quote = $value[0] == '"';
		if (!$have_quote)
		{
			trigger_error( 'Invalid value' );
			return array();
		}

		$pos = 1;
		$is_escaped = true;
		while ($is_escaped)
		{
			$pos = strpos( $value, '"', $pos );
			$is_escaped = $pos !== false
					   && $value[ $pos-1 ] == "\\";
		}

		$reached_end = $pos===false;

		$string = $reached_end
				? substr( $value, 1 )
				: substr( $value, 1, $pos-1 );

	   $values[ $id ] = $string;

	   $value = $reached_end
			  ? ''
			  : substr( $value, $pos+1 );

	   if ($value && $value[0] === ',')
	   {
		   $value = substr( $value, 1 );
	   }
	}

	return $values;
}

function ncore_simpleMapImplode( $values )
{
	if (!is_array($values))
	{
		return '';
	}

	$value = '';
	foreach ($values as $key => $val)
	{
		if ($value)
		{
			$value .= ',';
		}

		$val = str_replace( '"', '', $val );

		$value .= "$key:\"$val\"";
	}
}

function ncore_sortOptions( $options )
{
    if (!is_array($options) || empty($options)) {
        return array();
    }

	$have_mb = function_exists('mb_strtolower');

	$ids = array();
	$labels = array();
	$sort = array();

	$result = array();
	if (isset($options['NULL']))
	{
		$result['NULL'] = $options['NULL'];
		unset( $options['NULL'] );
	}
	if (isset($options[0]))
	{
		$result[0] = $options[0];
		unset( $options[0] );
	}

	foreach ($options as $id => $label)
	{
		$ids[] = $id;
		$labels[] = $label;
		$sort[] = $have_mb
				? mb_strtolower( $label )
				: strtolower( $label );
	}

	array_multisort( $sort, SORT_STRING, SORT_ASC, $ids, $labels );

	foreach ($ids as $index => $id)
	{
		$result[ $id ] = $labels[ $index ];
	}
	return $result;
}

function ncore_isNumericArray($array)
{
	if (!is_array($array))
	{
		return false;
	}

	if (!$array)
	{
		return true;
	}

	if (!isset($array[ 0 ]))
	{
		return false;
	}

	$keys = array_keys($array);

	foreach ($keys as $index => $key)
	{
		if (!is_numeric($key) || $index != $key)
		{
			return false;
		}
	}

	return true;
}

function ncore_purgeArray( $array, $key_map, $level=0 )
{
	$result = array();

	foreach ($array as $key => $element)
	{
		if (is_numeric( $key ))
		{
			$mapped_key    = $key;
			$keep_key      = true;
			$level_offset  = 0;
		}
		else
		{
			$mapped_key   = ncore_retrieve( $key_map, $key, false );
			$keep_key     = $mapped_key !== false;
			$level_offset = 1;
		}

		if (!$keep_key )
		{
			continue;
		}

		if ($level+$level_offset>0)
		{
			$result[ $mapped_key ] = $element;
			continue;
		}

		$have_object = is_object( $element );
		if ($have_object)
		{
			$element = (array) $element;
		}

		if (is_array( $element ))
		{
			$element = ncore_purgeArray( $element, $key_map, $level+$level_offset );
		}

		if ($have_object)
		{
			$element = (object) $element;
		}

		$result[ $mapped_key ] = $element;
	}

	return $result;
}

function ncore_explodeAndPurgeArray( $seperator_or_list, $text_with_seperators )
{
    if (is_array( $seperator_or_list )) {
        $seperator = array_shift( $seperator_or_list );

        if ($seperator_or_list) {
            $text_with_seperators = str_replace( $seperator_or_list, $seperator, $text_with_seperators );
        }
    }
    else {
        $seperator = $seperator_or_list;
    }

    $list_raw = explode( $seperator, $text_with_seperators );
    $list = array();
    foreach ($list_raw as $one) {
        $one = trim( $one );

        if ($one) {
            $list[] = $one;
        }
    }
    return $list;
}

function ncore_flattenAssocArray($array, &$ref, $path = null) {
    $keys = [];

    foreach($array as $k => $v) {
        $keys[] = $k;

        if(is_null($path)){
            $_p = $k;
        } else {
            $_p = $path . '.' . $k;
        }

        if (is_array($array[$k])) {
            $keys = array_merge($keys, ncore_flattenAssocArray($array[$k], $ref, $_p));
        } else {
            $ref[$_p] = $v;
        }
    }

    return $keys;
}