当前位置: 首页>>代码示例>>PHP>>正文


PHP ArrayUtility::filterByValueRecursive方法代码示例

本文整理汇总了PHP中TYPO3\CMS\Core\Utility\ArrayUtility::filterByValueRecursive方法的典型用法代码示例。如果您正苦于以下问题:PHP ArrayUtility::filterByValueRecursive方法的具体用法?PHP ArrayUtility::filterByValueRecursive怎么用?PHP ArrayUtility::filterByValueRecursive使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在TYPO3\CMS\Core\Utility\ArrayUtility的用法示例。


在下文中一共展示了ArrayUtility::filterByValueRecursive方法的3个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的PHP代码示例。

示例1: filterByValueRecursive

 /**
  * Reduce an array by a search value and keep the array structure.
  *
  * Comparison is type strict:
  * - For a given needle of type string, integer, array or boolean,
  * value and value type must match to occur in result array
  * - For a given object, a object within the array must be a reference to
  * the same object to match (not just different instance of same class)
  *
  * Example:
  * - Needle: 'findMe'
  * - Given array:
  * array(
  *   'foo' => 'noMatch',
  *   'bar' => 'findMe',
  *   'foobar => array(
  *     'foo' => 'findMe',
  *   ),
  * );
  * - Result:
  * array(
  *   'bar' => 'findMe',
  *   'foobar' => array(
  *     'foo' => findMe',
  *   ),
  * );
  *
  * See the unit tests for more examples and expected behaviour
  *
  * @param mixed $needle The value to search for
  * @param array $haystack The array in which to search
  * @return array $haystack array reduced matching $needle values
  */
 public static function filterByValueRecursive($needle = '', array $haystack = array())
 {
     $resultArray = array();
     // Define a lambda function to be applied to all members of this array dimension
     // Call recursive if current value is of type array
     // Write to $resultArray (by reference!) if types and value match
     $callback = function (&$value, $key) use($needle, &$resultArray) {
         if ($value === $needle) {
             $resultArray[$key] = $value;
         } elseif (is_array($value)) {
             $subArrayMatches = \TYPO3\CMS\Core\Utility\ArrayUtility::filterByValueRecursive($needle, $value);
             if (count($subArrayMatches) > 0) {
                 $resultArray[$key] = $subArrayMatches;
             }
         }
     };
     // array_walk() is not affected by the internal pointers, no need to reset
     array_walk($haystack, $callback);
     // Pointers to result array are reset internally
     return $resultArray;
 }
开发者ID:Mr-Robota,项目名称:TYPO3.CMS,代码行数:54,代码来源:ArrayUtility.php

示例2: addTcaSelectItem

 /**
  * Add an item to a select field item list.
  *
  * Warning: Do not use this method for radio or check types, especially not
  * with $relativeToField and $relativePosition parameters. This would shift
  * existing database data 'off by one'.
  *
  * As an example, this can be used to add an item to tt_content CType select
  * drop-down after the existing 'mailform' field with these parameters:
  * - $table = 'tt_content'
  * - $field = 'CType'
  * - $item = array(
  * 'LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:CType.I.10',
  * 'login',
  * 'i/tt_content_login.gif',
  * ),
  * - $relativeToField = mailform
  * - $relativePosition = after
  *
  * @throws \InvalidArgumentException If given parameters are not of correct
  * @throws \RuntimeException If reference to related position fields can not
  * @param string $table Name of TCA table
  * @param string $field Name of TCA field
  * @param array $item New item to add
  * @param string $relativeToField Add item relative to existing field
  * @param string $relativePosition Valid keywords: 'before', 'after'
  * @return void
  */
 public static function addTcaSelectItem($table, $field, array $item, $relativeToField = '', $relativePosition = '')
 {
     if (!is_string($table)) {
         throw new \InvalidArgumentException('Given table is of type "' . gettype($table) . '" but a string is expected.', 1303236963);
     }
     if (!is_string($field)) {
         throw new \InvalidArgumentException('Given field is of type "' . gettype($field) . '" but a string is expected.', 1303236964);
     }
     if (!is_string($relativeToField)) {
         throw new \InvalidArgumentException('Given relative field is of type "' . gettype($relativeToField) . '" but a string is expected.', 1303236965);
     }
     if (!is_string($relativePosition)) {
         throw new \InvalidArgumentException('Given relative position is of type "' . gettype($relativePosition) . '" but a string is expected.', 1303236966);
     }
     if ($relativePosition !== '' && $relativePosition !== 'before' && $relativePosition !== 'after' && $relativePosition !== 'replace') {
         throw new \InvalidArgumentException('Relative position must be either empty or one of "before", "after", "replace".', 1303236967);
     }
     if (!is_array($GLOBALS['TCA'][$table]['columns'][$field]['config']['items'])) {
         throw new \RuntimeException('Given select field item list was not found.', 1303237468);
     }
     // Make sure item keys are integers
     $GLOBALS['TCA'][$table]['columns'][$field]['config']['items'] = array_values($GLOBALS['TCA'][$table]['columns'][$field]['config']['items']);
     if ($relativePosition !== '') {
         // Insert at specified position
         $matchedPosition = ArrayUtility::filterByValueRecursive($relativeToField, $GLOBALS['TCA'][$table]['columns'][$field]['config']['items']);
         if (!empty($matchedPosition)) {
             $relativeItemKey = key($matchedPosition);
             if ($relativePosition === 'replace') {
                 $GLOBALS['TCA'][$table]['columns'][$field]['config']['items'][$relativeItemKey] = $item;
             } else {
                 if ($relativePosition === 'before') {
                     $offset = $relativeItemKey;
                 } else {
                     $offset = $relativeItemKey + 1;
                 }
                 array_splice($GLOBALS['TCA'][$table]['columns'][$field]['config']['items'], $offset, 0, array(0 => $item));
             }
         } else {
             // Insert at new item at the end of the array if relative position was not found
             $GLOBALS['TCA'][$table]['columns'][$field]['config']['items'][] = $item;
         }
     } else {
         // Insert at new item at the end of the array
         $GLOBALS['TCA'][$table]['columns'][$field]['config']['items'][] = $item;
     }
 }
开发者ID:rickymathew,项目名称:TYPO3.CMS,代码行数:74,代码来源:ExtensionManagementUtility.php

示例3: filterByValueRecursiveDoesNotMatchDifferentInstancesOfSameClass

 /**
  * @test
  */
 public function filterByValueRecursiveDoesNotMatchDifferentInstancesOfSameClass()
 {
     $this->assertEquals(array(), ArrayUtility::filterByValueRecursive(new \stdClass(), array(new \stdClass())));
 }
开发者ID:Mr-Robota,项目名称:TYPO3.CMS,代码行数:7,代码来源:ArrayUtilityTest.php


注:本文中的TYPO3\CMS\Core\Utility\ArrayUtility::filterByValueRecursive方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。