0

配列内のキーの名前を変更したい。

私は次のようなものを持っています:

$result=mysqli_query($link,$qry);
while($obj = mysqli_fetch_object($result)) 
{
   $arr[] = $obj;
}

echo '{"results":'.json_encode($arr).'}';

結果は 3 つのバリエーションで発生する可能性があります

  1. results: [{id_a:1, title:V}]
  2. results: [{id_b:1, title:V}]
  3. results: [{id_c:1, title:V}]

私のSQLクエリは、どのバリエーションを受け取るかを決定しているため、キー名を確認してidのみに変更する必要があります。

したがって、「キー」を次のように if('key'==id_a || 'key'==id_b || 'key'==id_c )変更するなどの確認が必要ですid

4

3 に答える 3

1

簡単なアプローチを取り、エイリアスを使用するようにデータベース クエリを変更するのは気が進まないので、次のようにします。

$result=mysqli_query($link,$qry);
while($obj = mysqli_fetch_object($result)) 
{
    if (isset($obj->id_a)) {
        $obj->id = $obj->id_a;
        unset($obj->id_a);
    } elseif (isset($obj->id_b)) {
        $obj->id = $obj->id_b;
        unset($obj->id_b);
    } elseif (isset($obj->id_c)) {
        $obj->id = $obj->id_c;
        unset($obj->id_c);
    }
    $arr[] = $obj;
}

echo '{"results":'.json_encode($arr).'}'

編集

$objects = array();
$object1 = new stdClass();
$object1->id_a = 1;
$object1->title = "Title 1";
$object2 = new stdClass();
$object2->id_b = 2;
$object2->title = "Title 2";
$objects[0] = $object1;
$objects[1] = $object2;


foreach($objects as $obj) {
    if (isset($obj->id_a)) {
        $obj->id = $obj->id_a;
        unset($obj->id_a);
    } elseif (isset($obj->id_b)) {
        $obj->id = $obj->id_b;
        unset($obj->id_b);
    } elseif (isset($obj->id_c)) {
        $obj->id = $obj->id_c;
        unset($obj->id_c);
    }

    var_dump($obj);
}

与える

object(stdClass)[1]
  public 'title' => string 'Title 1' (length=7)
  public 'id' => int 1

object(stdClass)[2]
  public 'title' => string 'Title 2' (length=7)
  public 'id' => int 2
于 2013-03-11T09:57:12.180 に答える
0

あなたはこのようなことを試すことができます:

$objects = array();
$object1 = new stdClass();
$object1->id_a = 1;
$object1->label = "label1";
$object2 = new stdClass();
$object2->id_b = 2;
$object2->label = "label2";
$objects[0] = $object1;
$objects[1] = $object2;

foreach($objects as $object) {
    foreach($object as $key => $value) {
        if(strpos($key, "id") !== false) {
            unset($object->$key);
            $key = "id";
            $object->$key = $value;
        }
    }
}
print_r($objects);
于 2013-03-11T10:02:26.380 に答える
0

キーの名前を変更したいので、

$i=0;
foreach(mysqli_fetch_object($result) as $key=>$value) {
        $arr[$key."_".$i] = $value;
        $i++;
}
echo '{"results":'.json_encode($arr).'}';
于 2013-03-11T10:07:42.127 に答える