如何通过数组键重新排列数组?

时间:2019-11-28 04:59:50

标签: php arrays

我只是想重新排列数组以进行正确的循环。 我很荣幸能帮助我解决这个问题。

My input array is:-

array(
'text'=>array('icon_title_1'=>'Test 1','icon_title_2'=>'Test 2'),
'image'=>array('icon_file_1',='test.jpg','icon_file_2'=>'test2.jpg')
 )

 My Required output array is:-

 array(
     0=>array(
         'text'=>'Test 1'
         'image'=>'test.jpg'    
     ),
     1=>array(
         'text'=>'Test 2'
         'image'=>'test2.jpg'   
     )
  );

4 个答案:

答案 0 :(得分:1)

假设这是您输入的最终格式。您可以使用@Component public class MyTaskListener implements TaskListener { public static UserService getUserServiceObject() { return SpringApplicationContextHolder.getApplicationContext().getBean(UserService.class); } @Override public void notify(DelegateTask delegateTask) { //UserService Object, It is not null now getUserServiceObject(); } } @Component public class SpringApplicationContextHolder implements ApplicationContextAware { private static ApplicationContext applicationContext = null; public static ApplicationContext getApplicationContext() { return applicationContext; } @Override public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { this.applicationContext = applicationContext; } }

解决方案

array_map

输出

$data = array(
    'text'=>array('icon_title_1' =>'Test 1','icon_title_2'=>'Test 2'),
    'image'=>array('icon_file_1' => 'test.jpg','icon_file_2'=>'test2.jpg')
);

$func = function($text, $image){
    return  [
            'text' => $text,
            'image' => $image
        ];
};
var_dump(array_map($func, $data['text'], $data['image']));

答案 1 :(得分:1)

对于给定的输入格式,您可以使用以下代码获取结果,假设使用内部数组键格式,例如icon_title_1,icon_title_2,icon_title_3等。以及icon_file_1,icon_file_2等。

$input = array(
'text'=>array(
                'icon_title_1'=>'Test 1',
                'icon_title_2'=>'Test 2'),
'image'=>array(
                'icon_file_1'=>'test.jpg',
                'icon_file_2'=>'test2.jpg')
);
$output = array();
$index = 0;
foreach($input  as $key => $value){
 foreach($value as $k => $v){
     $indexPart = explode("_",$k);
     $index = $indexPart[count($indexPart)-1];
     $output[$index][$key] = $v;
 }
}

print_r($output);

答案 2 :(得分:1)

您可以使用简单的嵌套foreach循环来变换数组:

$result = array();
foreach ($array as $key => $arr) {
    $i = 0;
    foreach ($arr as $v) {
        $result[$i++][$key] = $v;
    }
}
print_r($result);

输出:

Array
(
    [0] => Array
        (
            [text] => Test 1
            [image] => test.jpg
        )
    [1] => Array
        (
            [text] => Test 2
            [image] => test2.jpg
    )
)

Demo on 3v4l.org

答案 3 :(得分:0)

使用还可以使用 foreach 循环:

 $newarray = array();
    foreach ($array as $k => $arr) {
        $i = 0;
        foreach ($arr as $ar) {
            $newarray[$i++][$k] = $ar;
        }
    }
    print_r($newarray);