改变数组的形式(PHP)

Change the form of an array (PHP)

我的 php 应用程序中有一个巨大而复杂的问题。详情如下:

我目前将其作为我的数组(转储变量):

array (size=6)
  0 => string '11/04/15' (length=8)
  1 => string '15/04/15' (length=8)
  2 => string '19/04/15' (length=8)
  3 => string '1' (length=1)
  4 => string '1' (length=1)
  5 => string '3' (length=1)

但我希望它显示为:

array (size=6)
  array(size=2)
    string '11/04/15' (length=8)
    string '1' (length=1)
  array(size=2)
    string '15/04/15' (length=8)
    string '1' (length=1)
  array(size=2)
    string '19/04/15' (length=8)
    string '3' (length=1)

如您所见,我想添加子数组、重新排序结构并删除键。起始数组值发生变化,因此可能会有更多 dates/less 日期和数字。还有它的链接,密钥 0 应该用密钥 3 批量处理,密钥 1 用密钥 4 批量处理等等。我认为这些信息已经足够了。

PS:我正在尝试为图表 PHP 的条形图 (http://www.chartphp.com/) 安排数据。

我的方法如下:

  1. 使用 foreach 循环遍历数组值并找出第一个数字何时开始(在本例中,它是 4. 元素)
  2. 将数字保存在变量中。
  3. 创建一个新数组
  4. 再次遍历旧数组并获取对,然后将它们推入新数组。

代码类似于:

<?
$old = array("date1","date2","date3",1,2,3);
$n = null;
foreach($old as $k => $v){
  if(/*CHECK HERE IF $v is NOT A DATE anymore*/){
    $n = $k;
    break;
  }
}
$new = array();
foreach($old as $k => $v){
  if($k < $n){
    $temp = array($v, $old[$k+$n]);
    array_push($new, $temp);
  }
}
var_dump ($new);
?>

这应该适合你:

因为很明显我要假设,您预期结果背后的模式应该是将数字与按 ASC 排序的日期相结合。

所以在这里我首先将所有日期放入一个数组中,其中 preg_grep(). Then I also get the numbers by getting the array_diff() 来自原始数组和日期数组。

然后我对数组 ASC 和 $dates 数组进行排序 usort() where I compare the timestampes which I get with strtotime() and the $numbers array I sort simply with sort()

最后,我简单地用 array_map() 循环遍历两个数组,然后在其中创建预期的结果。

<?php

    $arr = [
            "19/04/15",
            "11/04/15",
            "15/04/15",
            "3",
            "1",
            "1",
        ];

    $dates = preg_grep("/\d{2}\/\d{2}\/\d{2}/", $arr);
    $numbers = array_diff($arr, $dates);

    sort($numbers);
    usort($dates, function($a, $b){
        if(strtotime($a) == strtotime($b))
            return 0;
        return strtotime($a) < strtotime($b) ? 1 : -1;
    });

    $result = array_map(function($v1, $v2){
        return [$v1, $v2];
    }, $dates, $numbers);

    print_r($result);

?>

输出:

Array
(
    [0] => Array
        (
            [0] => 11/04/15
            [1] => 1
        )

    [1] => Array
        (
            [0] => 15/04/15
            [1] => 1
        )

    [2] => Array
        (
            [0] => 19/04/15
            [1] => 3
        )

)