/// <summary> /// Inserts specified items before the first item of an array and reindex integer keys starting from zero. /// </summary> /// <param name="array">The array to be unshifted.</param> /// <param name="vars">Variables to be inserted.</param> /// <returns>The number of items in resulting array.</returns> public static int array_unshift(PhpArray array, params PhpValue[] vars) { if (array == null) { //PhpException.ReferenceNull("array"); //return 0; throw new ArgumentNullException(); } // reindexes integer keys starting from the number of items to be prepended: array.ReindexIntegers(vars.Length); // prepends items indexing keys from 0 to the number of items - 1: for (int i = vars.Length - 1; i >= 0; i--) { array.Prepend(i, vars[i]); } return array.Count; }
/// <summary> /// Removes the first item of an array and reindex integer keys starting from zero. /// </summary> /// <param name="array">The array to be shifted.</param> /// <returns>The removed object.</returns> /// <remarks>Resets intrinsic enumerator.</remarks> public static PhpValue array_shift(PhpArray array) { if (array == null) { //PhpException.ReferenceNull("array"); //return null; throw new ArgumentNullException(); } if (array.Count == 0) return PhpValue.Null; // dereferences result since the array doesn't do so: var result = array.RemoveFirst().Value; // TODO: PhpVariable.Dereference // reindexes integer keys starting from zero: array.ReindexIntegers(0); array.RestartIntrinsicEnumerator(); return result; }