【问题标题】:PHP convert stdClass Object to string and reduce array with max valuePHP将stdClass对象转换为字符串并用最大值减少数组
【发布时间】:2014-05-11 21:02:15
【问题描述】:

我想将stdClass 对象转换为字符串,并从stdClass 对象中减少一个具有最大值的数组。

这是我的数组:

Array
(

[135] => Array
    (
        [0] => stdClass Object
            (
                [ID] => 145
            )

        [1] => stdClass Object
            (
                [ID] => 138
            )

        [2] => stdClass Object
            (
                [ID] => 139
            )

    )

[140] => Array
    (
        [0] => stdClass Object
            (
                [ID] => 163
            )

        [1] => stdClass Object
            (
                [ID] => 155
            )
)

基本上应该是这样的:

 Array
 (
 [135] => 139
 [140] => 164
 )

这可能吗?我尝试了各种 foreach 循环,但我没有用 stdClass 对象得到它...

到目前为止我的尝试:

 foreach($ids as $k => $v) {
   for($i = 0; $i < count($v); $i++) {
        $idss[$i] = array()$v;
    }
 }

这行不通。

【问题讨论】:

  • 你有一个多维数组,你想要一个普通数组?我没有看到转换背后的“逻辑”。请详细说明。摆脱“对象”的一种简单方法是使用json_encode()对其进行编码,然后使用设置为true的第二个参数将其解码:$output = json_decode(json_encode($input), true);

标签: php arrays stdclass


【解决方案1】:

这将解决您的目的。如果有任何问题,请告诉我。

$ids[135][0]->ID = 145;
$ids[135][1]->ID = 135;
$ids[135][2]->ID = 155;
$ids[140][0]->ID = 125;
$ids[140][1]->ID = 135;
$idss = array();
foreach($ids as $k => $v) {
   for($i = 0; $i < count($v); $i++) {
        if(!@$idss[$k] || $v[$i]->ID > $idss[$k])
        {
            $idss[$k] = $v[$i]->ID;
        }
    }
 }
 echo "<Pre>";
 print_r($idss);
 die;

【讨论】:

  • @ ?使用isset($idss[$k])
  • 我爱你!太感谢了!如果你有时间,你能解释一下你在 if 子句中做了什么吗? :)
  • 欢迎您。当然! $k 第一次迭代的值为 135。所以我检查了 $idss[$k] 是否存在,如果它存在,那么条件将为假,它会检查第二个条件。 $v[$i]->ID > $idss[$k] 意味着它检查迭代中的新值是否大于 $idss 数组中的现有值,然后用新值替换它。我希望你能理解。这就是我可以在短信中做的:)
【解决方案2】:

已经回答,但这里有一个较短的版本

$final_array =array();
foreach($arr as $key=>$val){
  $max = max(array_keys($val));
  $final_array[$key] = $val[$max]->ID ;
}

print_r($final_array);

这里$arr 是您的输入数组。

【讨论】:

    【解决方案3】:

    您需要在您的内部 for 循环中进行一些比较,以了解哪一个拥有最大值。这是一个例子:

    $new_arr = array();
    foreach($elements as $index => $value){
      $max = -1;
      $foreach($value as $obj){
        if($obj->id > $max)
          $max = $obj->id;
      }
      $new_arr [$index] = $max;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-03-01
      • 2011-11-08
      • 1970-01-01
      • 2013-10-29
      • 2021-11-10
      • 2020-08-13
      • 2013-05-06
      • 2016-03-09
      相关资源
      最近更新 更多