简体   繁体   English

将数组元素组合在一起

[英]Group together array elements

I have an array in PHP:- 我有一个PHP数组: -

$arr = ["BX_NAME0","BX_NAME1","BX_NAME2","BX_categoryName0","BX_categoryName1","BX_categoryName2","BHA_categories0","BHA_categories1","BHA_categories2"] 

Here I want to group together elements based on same ending integer together in json like 在这里,我想在json中将基于相同结束整数的元素组合在一起

$post_data = array(
      '0' => array(
        'BX_NAME0' => $item_type,
        'BX_categoryName0' => $string_key,
        'BHA_categories0' => $string_value
      ),
      '1' => array(
        'BX_NAME1' => $item_type,
        'BX_categoryName1' => $string_key,
        'BHA_categories1' => $string_value
      ),
);

I have Used:- filter_var($key , FILTER_SANITIZE_NUMBER_INT); 我用过: - filter_var($key , FILTER_SANITIZE_NUMBER_INT);

to get the integer part of the array elements but don't known how to group them further. 获取数组元素的整数部分,但不知道如何进一步分组。

You can do it like below using preg_match():- 您可以使用preg_match()执行以下操作: -

$new_array = array();

foreach ($arr as $ar){
   preg_match_all('!\d+!', $ar, $matches); //get the number from string
   $new_array[$matches[0][0]][$ar] = '';

}
echo "<pre/>";print_r($new_array);

Output:- https://eval.in/715548 输出: - https://eval.in/715548

It should be something like this:- 它应该是这样的: -

$arr = array("BX_NAME0","BX_NAME1","BX_NAME2","BX_categoryName0","BX_categoryName1","BX_categoryName2","BHA_categories0","BHA_categories1","BHA_categories2");

$post_data = array();

foreach($arr as $value) {
    $key = filter_var($value , FILTER_SANITIZE_NUMBER_INT);
    if(isset($post_data[$key]) && !is_array($post_data[$key])) {
         $post_data[$key] = array();
    }
    $post_data[$key][] = $value;
}

print_r($post_data);

Tested and works However, I suggest you use substr() to get the last character of the array item, for performance and stuff.. 测试和工作但是,我建议您使用substr()来获取数组项的最后一个字符,以获得性能和内容。

By using filter_var() method 通过使用filter_var()方法

$arr = ["BX_NAME0","BX_NAME1","BX_NAME2","BX_categoryName0","BX_categoryName1","BX_categoryName2","BHA_categories0","BHA_categories1","BHA_categories2"];
    foreach($arr as $a){
        $int = filter_var($a, FILTER_SANITIZE_NUMBER_INT);
        $newarr[$int][$a] = '';
    }
    print_r($newarr);

Output:- https://eval.in/715581 输出: - https://eval.in/715581

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM