简体   繁体   English

如何在 PHP 中的特定数组键之前排列数组

[英]How can i arrange array before specific array key in PHP

I would like to arrange Array before found a specific array key.我想在找到特定的数组键之前排列数组。 For example例如

Following is array.以下是数组。

Array(
    [0] => Array([package_name] => 10.4)
    [1] => Array([final_total] => 10.4)
    [2] => Array([package_name] => 10.5)
    [3] => Array([package_name] => 4.5)
    [4] => Array([final_total] => 15)
    [5] => Array([package_name] => 15.2)
    [6] => Array([final_total] => 15.2)
    [7] => Array([package_name] => 8.4)
    [8] => 8.4
)

And I want like array.我想要像数组。

(
    [0] => Array
        (
            [package_name] =>  array([0]=>10.4),
            [final_total] => 10.4
        )

    [1] => Array
        (
            [package_name] => array(
                [0] => 10.5,
                [1] => 4.5   
            ),         
            [final_total] => 15
        )

    [2] => Array
        (
            [package_name] => array([0]=>15.2)            
            [final_total] => 15.2
        )

    [3] => Array
        (
            [package_name] => array([0]=>8.4)            
            [final_total] => 8.4
        )

)

So What i want If final_total key is found from array then set previous values(package_name) of final_total in a array.所以我想要什么 如果从数组中找到final_total键,则在数组中设置final_total先前值(package_name)。

Above example you can see there are 4 final_total key's of array so i want to set each package_name's value in a array that are previous value of final_total.在上面的示例中,您可以看到数组中有 4 个final_total键,因此我想在数组中设置每个 package_name 的值,这些值是 final_total 的先前值。

Following is my code.以下是我的代码。 This is my array这是我的数组

$main = array(array('package_name' => 10.4),array('final_total' => 10.4),array('package_name' => 10.5),array('package_name' => 4.5),array('final_total' => 15)
,array('package_name' => 15.2),array('final_total' => 15.2));

Code.代码。

<?php 
$newArray = [];

$newPackag=[];
$previousValue='';
$currentKey=0;
$PreviousKey=0;
$i=0;
$main_keys = array_keys($main);

foreach ($main as $key => $value) {

     $curtent_item[] = isset($main[$key]['package_name']) ? $main[$key]['package_name'] : '';
        $currentKey = $key;
      if(@$main[$key]['final_total'] ==@$value['final_total']){         
            $previousValue = @$value['package_name'];
            $newArray[] = $previousValue;

            $myarray= array(@$main[$key]['package_name']);
            if (array_key_exists("final_total",$main[$key])){
                if($PreviousKey ==0){
                    $PreviousKey = $key+1;
                }else{
                    $PreviousKey = $key;
                }           
            }else{
                $keys = array_keys($main);
                $position = array_search($key, $keys);  

               echo "Curent Key =".$currentKey.'PreviousKey'.$PreviousKey.'</br>';
               if($currentKey != $PreviousKey){
              $nextKey = $keys[$currentKey+1 ];

               }            
            $newPackag1[]    = array('package_name'=>@$myarray);    
        }
        $mainArray = array('package'=>$newPackag1);

      }


            $i++;  

}
echo "<pre>NE page";print_r($newPackag1);
echo "<pre>";print_r($main);

anyone has better and correct solution.任何人都有更好和正确的解决方案。 Above code which i am trying not able to get desire output.上面我试图无法获得所需输出的代码。

Here is the snippet with modified data(surely will work for your case too),这是带有修改数据的片段(当然也适用于您的情况),

$result = [];$i= 0;
foreach ($main as $key => $value) {
    if (is_array($value)) {
        $k = key($value);$v = array_shift($value);
        ($k != 'final_total' ? $result[$i][$k][] = $v : $result[$i][$k] = $v);
        if($k == 'final_total'){
            $i++;
        }
    } elseif (!empty($value)) {
        $result[$i]['final_total'] = $value;
    }
}
print_r($result);

Demo演示

Output:-输出:-

Array
(
    [0] => Array
        (
            [package_name] => Array
                (
                    [0] => 6.5
                    [1] => 9
                )

            [final_total] => 15.5
        )

    [1] => Array
        (
            [package_name] => Array
                (
                    [0] => 10.5
                )

            [final_total] => 10.5
        )

    [2] => Array
        (
            [package_name] => Array
                (
                    [0] => 17.1
                )

            [final_total] => 17.1
        )

    [3] => Array
        (
            [package_name] => Array
                (
                    [0] => 9.8
                )

            [final_total] => 9.8
        )

    [4] => Array
        (
            [package_name] => Array
                (
                    [0] => 16
                )

            [final_total] => 16
        )

    [5] => Array
        (
            [package_name] => Array
                (
                    [0] => 10.5
                )

            [final_total] => 10.5
        )

)

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

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