Tôi có một đối tượng PHP và tôi đang cố gắng để có được giá trị bằng khóa mà không cần sử dụng foreach.
Nếu tôi làm dưới đây, tôi có thể nhận được giá trị:
$item_data_decode->meta_data[0]->value;
Nhưng các mục có thể nằm trong các đơn đặt hàng khác nhau, vì vậy không thể tin tưởng vào phương pháp này và tôi cần sử dụng khóa tuy nhiên điều này không hoạt động:
$item_data_decode->meta_data['First Name'];
Mã số:
$item_data_decode = json_decode[$item_values];
if [!empty[$item_data_decode->meta_data]] {
$fName = $item_data_decode->meta_data['First Name']->value;
}
Object:
$a = new stdClass[];
$a->meta_data = array[];
$a->meta_data[0] = new stdClass[];
$a->meta_data[0]->id = "2113";
$a->meta_data[0]->key = "First Name";
$a->meta_data[0]->value = "Recipient First Name";
$a->meta_data[1] = new stdClass[];
$a->meta_data[1]->id = "2114";
$a->meta_data[1]->key = "Last Name";
$a->meta_data[1]->value = "Recipient Last Name";
$a->meta_data[2] = new stdClass[];
$a->meta_data[2]->id = "2115";
$a->meta_data[2]->key = "addressLine 1";
$a->meta_data[2]->value = "Recipient Address Line 1";
$a->meta_data[3] = new stdClass[];
$a->meta_data[3]->id = "2116";
$a->meta_data[3]->key = "addressLine2";
$a->meta_data[3]->value = "Recipient Address Line 2";
$a->meta_data[4] = new stdClass[];
$a->meta_data[4]->id = "2117";
$a->meta_data[4]->key = "City";
$a->meta_data[4]->value = "Recipient Town/City";
$a->meta_data[5] = new stdClass[];
$a->meta_data[5]->id = "2118";
$a->meta_data[5]->key = "Region";
$a->meta_data[5]->value = "Recipient Region/County";
$a->meta_data[6] = new stdClass[];
$a->meta_data[6]->id = "2119";
$a->meta_data[6]->key = "Country";
$a->meta_data[6]->value = "N/A";
$a->meta_data[7] = new stdClass[];
$a->meta_data[7]->id = "2120";
$a->meta_data[7]->key = "Postcode";
$a->meta_data[7]->value = "Recipient Postcode";
// outputs
[meta_data] => Array [ [0] => stdClass Object [ [id] => 2113 [key] => First Name [value] => Recipient First Name ] [1] => stdClass Object [ [id] => 2114 [key] => Last Name [value] => Recipient Last Name ] [2] => stdClass Object [ [id] => 2115 [key] => addressLine 1 [value] => Recipient Address Line 1 ] [3] => stdClass Object [ [id] => 2116 [key] => addressLine2 [value] => Recipient Address Line 2 ] [4] => stdClass Object [ [id] => 2117 [key] => City [value] => Recipient Town/City ] [5] => stdClass Object [ [id] => 2118 [key] => Region [value] => Recipient Region/County ] [6] => stdClass Object [ [id] => 2119 [key] => Country [value] => N/A ] [7] => stdClass Object [ [id] => 2120 [key] => Postcode [value] => Recipient Postcode ] ]
Thêm true
vào
$item_data_decode->meta_data['First Name'];
0 cung cấp những điều sau:Array [ [id] => 232 [order_id] => 320 [name] => Tb [product_id] => 50 [variation_id] => 0 [quantity] => 1 [tax_class] => [subtotal] => 50 [subtotal_tax] => 0 [total] => 50 [total_tax] => 0 [taxes] => Array [ [total] => Array [ ] [subtotal] => Array [ ] ] [meta_data] => Array [ ] ] Array [ [id] => 233 [order_id] => 320 [name] => Turtle Bay Gift Card [product_id] => 50 [variation_id] => 0 [quantity] => 1 [tax_class] => [subtotal] => 30 [subtotal_tax] => 0 [total] => 30 [total_tax] => 0 [taxes] => Array [ [total] => Array [ ] [subtotal] => Array [ ] ] [meta_data] => Array [ [0] => Array [ [id] => 2113 [key] => First Name [value] => Recipient First Name ] [1] => Array [ [id] => 2114 [key] => Last Name [value] => Recipient Last Name ] [2] => Array [ [id] => 2115 [key] => addressLine 1 [value] => Recipient Address Line 1 ] [3] => Array [ [id] => 2116 [key] => addressLine2 [value] => Recipient Address Line 2 ] [4] => Array [ [id] => 2117 [key] => City [value] => Recipient Town/City ] [5] => Array [ [id] => 2118 [key] => Region [value] => Recipient Region/County ] [6] => Array [ [id] => 2119 [key] => Country [value] => N/A ] [7] => Array [ [id] => 2120 [key] => Postcode [value] => Recipient Postcode ] ] ]
Hỏi ngày 17 tháng 10 năm 2017 lúc 21:32Oct 17, 2017 at 21:32
Ben Hben hBen H
4921 Huy hiệu vàng6 Huy hiệu bạc22 Huy hiệu đồng1 gold badge6 silver badges22 bronze badges
1
Truy cập mỗi thuộc tính là cách bạn thường truy cập một thuộc tính của một đối tượng. Lưu ý rằng vì
$item_data_decode->meta_data['First Name'];
1 có không gian, nên không thể truy cập bằng ký hiệu mũi tên và phải được đặt trong niềng răng xoăn. Đối với bất kỳ tài sản nào không có không gian, không cần niềng răng xoăn.Note that since
$item_data_decode->meta_data['First Name'];
1 has a space, it cannot be accessed by the arrow notation and must be enclosed in curly braces. For any property that doesn't have a space, there is no need for the curly braces.Lý do mã của bạn bị lỗi là vì bạn đang cố gắng truy cập các thuộc tính bằng cách sử dụng ký hiệu khung vuông được sử dụng cho các mảng.
Tôi biết rằng bạn không thể chỉnh sửa đầu ra mảng thực tế, nhưng nếu bạn có thể chỉnh sửa JSON thì điều này sẽ giải quyết các vấn đề của bạn.
var_dump[$item_data_decode->meta_data->{"First name"}->value]; // outputs "Recipient First Name"
Đã trả lời ngày 17 tháng 10 năm 2017 lúc 22:19Oct 17, 2017 at 22:19
JustcartyjustcartyJustCarty
3,7045 huy hiệu vàng30 huy hiệu bạc50 huy hiệu đồng5 gold badges30 silver badges50 bronze badges
Cá nhân tôi sẽ chuẩn bị dữ liệu như thế này:
$item_data_decode = json_decode[$item_values, true];
$meta_array = array_combine[array_column[$item_data_decode['meta_data'], 'key'], $item_data_decode['meta_data']];
if [!empty[$meta_array['First Name']]] {
$fName = $meta_array['First Name']['value'];
}
Thông số thứ hai trong
$item_data_decode->meta_data['First Name'];
0 đảm bảo nó chỉ trả về các mảng [thủ công.]. Bằng cách này, bạn có thể sử dụng hàm mảng như $item_data_decode->meta_data['First Name'];
3 [thủ công] và ________ 14 [thủ công] và nhận một mảng rất gần với cấu trúc bạn muốn.Trường hợp kiểm tra, vì không có mã nào là ngắn gọn cho nó.
Đã trả lời ngày 17 tháng 10 năm 2017 lúc 22:03Oct 17, 2017 at 22:03
jh2711jh2711jh2711
2.2781 Huy hiệu vàng11 Huy hiệu bạc20 Huy hiệu đồng1 gold badge11 silver badges20 bronze badges
6
Nếu bạn có thể sửa đổi cấu trúc mảng, thì cấu trúc nó như thế này:
array[
'First Name'=>array[
'id'=>2113,
'value'=>'Recipient First Name'
],
'Last Name'=>array[
'id'=>2114,
'value'=>'Recipient Last Name'
],
. . .
];
Sau đó, bạn vẫn có thể sử dụng mảng này trong vòng lặp
$item_data_decode->meta_data['First Name'];
5 như trước đây nếu cần, mặc dù với một số thay đổi, trong khi có thể truy cập giá trị bạn muốn trực tiếp.Nếu bạn không thể sửa đổi cấu trúc mảng, thì bạn sẽ không gặp may và một vòng lặp
$item_data_decode->meta_data['First Name'];
5 là bắt buộc nếu bạn muốn tìm giá trị bạn muốn.Nếu mối quan tâm của bạn là hiệu suất truy cập mảng nhiều lần, thì hãy xem xét chuyển đổi mảng thành cấu trúc ở trên trước khi xử lý.
Chỉnh sửa
Ví dụ chuyển đổi mảng:
$transformed_array = array[];
foreach[$item_data_decode->meta_data as $data] {
$transformed_array[$data['key']] = array[
'id'=>$data['id'],
'value'=>$data['value']
];
}
Đã trả lời ngày 17 tháng 10 năm 2017 lúc 21:44Oct 17, 2017 at 21:44
B. Flemingb. FlemingB. Fleming
7.0251 Huy hiệu vàng19 Huy hiệu bạc34 Huy hiệu đồng1 gold badge19 silver badges34 bronze badges
5