Php 提取对象属性以在数组中使用

Php 提取对象属性以在数组中使用,php,arrays,object,Php,Arrays,Object,我有一个JSON字符串,其中包含一些未序列化为对象(STDClass/object)的值 其中有几个值,但我必须将其中的8个值提取到多维数组中。这段代码显示了我所关注的JSON中存在的值: "picture1":"path/to/image/picture1.jpg" "picture1_color":"#000000" "picture2":"path/to/image/picture2.jpg" "picture2_color":"#111111" "picture3":"path/to/i

我有一个JSON字符串,其中包含一些未序列化为对象(STDClass/object)的值

其中有几个值,但我必须将其中的8个值提取到多维数组中。这段代码显示了我所关注的JSON中存在的值:

"picture1":"path/to/image/picture1.jpg"
"picture1_color":"#000000"
"picture2":"path/to/image/picture2.jpg"
"picture2_color":"#111111"
"picture3":"path/to/image/picture3.jpg"
"picture3_color":"#222222"
"picture4":"path/to/image/picture4.jpg"
"picture4_color":"#333333"
我想提取这些值并将它们放入如下数组:

Array
(
    [0] => Array
        (
            [picture] => path/to/image/picture1.jpg
            [color] => #000000
        )

    [1] => Array
        (
            [picture] => path/to/image/picture2.jpg
            [color] => #111111
        )

and so forth


)

这是通过编程实现的还是我只需要手工实现的?

我认为您只需要将JSON作为字符串:

$myData = '[{"picture1":"path/to/image/picture1.jpg","picture1_color":"#000000"},{"picture2":"path/to/image/picture2.jpg","picture2_color":"#111111"},{"picture3":"path/to/image/picture3.jpg","picture3_color":"#222222"},{"picture4":"path/to/image/picture4.jpg","picture4_color":"#333333"}]';
然后将JSON字符串解码为数组:

print_r(JSON_decode($myData, TRUE));
同时生成以下PHP数组:

Array
(
[0] => stdClass Object
    (
        [picture1] => path/to/image/picture1.jpg
        [picture1_color] => #000000
    )

[1] => stdClass Object
    (
        [picture2] => path/to/image/picture2.jpg
        [picture2_color] => #111111
    )

[2] => stdClass Object
    (
        [picture3] => path/to/image/picture3.jpg
        [picture3_color] => #222222
    )

[3] => stdClass Object
    (
        [picture4] => path/to/image/picture4.jpg
        [picture4_color] => #333333
    )

)

我一直使用json_编码和json_解码,当PHP与Node.js和js一起使用时,它非常方便。

使用您提供的所有条件(原始数据结构、将序列化取消为对象而不是数组等),并假设它们都是不可协商的,这就是我如何提取您正在寻找的碎片的方法:

$json_serialized_input = '{"something":"foo","something_else":"bar","picture1":"path/to/image/picture1.jpg","picture1_color":"#000000","picture2":"path/to/image/picture2.jpg","picture2_color":"#111111","picture3":"path/to/image/picture3.jpg","picture3_color":"#222222","picture4":"path/to/image/picture4.jpg","picture4_color":"#333333"}';  

$input = json_decode($json_serialized_input);

$output = [];
for ($i = 1; $i <= 4; $i++) {
    $current_picture_property = 'picture' . $i;
    $current_color_property = $current_picture_property . '_color';

    $output[] = [
        'picture' => $input->{$current_picture_property},
        'color' => $input->{$current_color_property},
    ];
}

var_dump($output);

手工你会怎么做呢?用纸和笔?只是手动提取,我的意思是你们的输出当然和OP想要的输出略有不同。请注意,他希望在输出结果的二维数组中包含
picture
color
的关键名称。是的,您的非常准确!谢谢。是的,这是该走的路。我必须检查数字和图片是否存在,因为有时只定义了3或2张图片,而不是4张。但是我可以让它工作,谢谢你的洞察力。哈,我差点建议检查一下它们是否设置好了。很高兴它有帮助!
array(4) {
  [0]=>
  array(2) {
    ["picture"]=>
    string(26) "path/to/image/picture1.jpg"
    ["color"]=>
    string(7) "#000000"
  }
  [1]=>
  array(2) {
    ["picture"]=>
    string(26) "path/to/image/picture2.jpg"
    ["color"]=>
    string(7) "#111111"
  }
  [2]=>
  array(2) {
    ["picture"]=>
    string(26) "path/to/image/picture3.jpg"
    ["color"]=>
    string(7) "#222222"
  }
  [3]=>
  array(2) {
    ["picture"]=>
    string(26) "path/to/image/picture4.jpg"
    ["color"]=>
    string(7) "#333333"
  }
}