Php 将数组元素组合在一起

Php 将数组元素组合在一起,php,arrays,json,Php,Arrays,Json,我有一个PHP数组:- $arr = ["BX_NAME0","BX_NAME1","BX_NAME2","BX_categoryName0","BX_categoryName1","BX_categoryName2","BHA_categories0","BHA_categories1","BHA_categories2"] 在这里,我想将基于相同结尾整数的元素组合在一起,类似于json $post_data = array( '0' => array(

我有一个PHP数组:-

$arr = ["BX_NAME0","BX_NAME1","BX_NAME2","BX_categoryName0","BX_categoryName1","BX_categoryName2","BHA_categories0","BHA_categories1","BHA_categories2"] 
在这里,我想将基于相同结尾整数的元素组合在一起,类似于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
      ),
);
我使用了:-
filter\u var($key,filter\u SANITIZE\u NUMBER\u INT)


获取数组元素的整数部分,但不知道如何进一步分组

应该是这样的:-

$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);
测试和工作
但是,我建议您使用substr()获取数组项的最后一个字符,以提高性能

使用
filter\u 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);
输出:-

您可以使用preg_match()进行如下操作:-

$new_array=array();
外汇($arr作为$ar){
preg_match_all(“!\d+!”,$ar,$matches);//从字符串中获取数字
$new_数组[$matches[0][0][$ar]='';
}
回声“;打印(新阵列);

输出:-

@Anant它很有魅力。@smarttechy很高兴帮助您。干杯:):)刚刚编辑了答案。filter_var()也可以工作。请检查此项,如果不是预期的,那么我将删除我的答案。@Anant他的解决方案有效,他先回答,然后回答这里的其他人。将其更改为OP想要的
$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);