我的php函数有问题。 我想要得到的是:根据条件是否重新排序数组。
我的数组格式为:
Array (
[id] => 3
[idCategory] => 1
.... => **
[images] => Array (
[0] => Array (
[path] => http://ssdds.jpg
[type] => logo
[default] => false
[alt] =>
)
[1] => Array (
[path] => http://saasdsd.jpg
[type] => photo
[default] => true
[alt] =>
)
[2] => Array (
[path] => http://saddadsasd.jpg
[type] => photo
[default] => false
[alt] =>
)
)
**....
正如您在每张图片中看到的那样,有一个名为&#34的标签;默认情况下,此标签可以是TRUE或FALSE。只有照片可以具有TRUE属性。 我对:
感兴趣1)滚动数组并查看DEFAULT字段中是否有TRUE属性的图片;
2)如果不存在则将数组保留为found;
3)如果有一张TRUE属性的图片,这张照片必须放在数组的第一个位置;
我该怎么做?
谢谢 史蒂夫
答案 0 :(得分:0)
我没有写任何代码,因为我不知道我该怎么做..
目前我只进行了测试,例如验证数组中包含的图像数量,因为我正在考虑进行for循环:
$countimg = count($data['images']);
答案 1 :(得分:0)
也许是这样的:
<myTag:dataList id="test">
<myTag:options value="#{myBean.myCollection}" var="mySingleObj" itemValue="#{mySingleObj.value}" itemLabel="#{mySingleObj.label}" />
</myTag:dataList>
答案 2 :(得分:0)
试试这个:
usort($array['images'], function($x,$y){ // $array is your Array.
if ($x['default']===true) return -1;
elseif ($x['default']===false) return 1;
else return 0;
});
按您的方式对数组[&#39;图像&#39;]进行排序。
答案 3 :(得分:0)
我使用array_splice尝试了类似下面的内容 参考:Move an array element to a new index in PHP
$arr['images'] = array (
'0' => array (
'path' => 'http://img1.jpg',
'type' => 'logo',
'default' => false,
'alt' => ''
),
'1' => array (
'path' => 'http://img2.jpg',
'type' => 'photo',
'default' => true,
'alt' => ''
),
'2' => array (
'path' => 'http://img3.jpg',
'type' => 'photo',
'default' => false,
'alt' => ''
),
'3' => array (
'path' => 'http://img4.jpg',
'type' => 'photo',
'default' => true,
'alt' => ''
));
foreach($arr['images'] as $key => $img)
{
if($img['default'] == true)
{
$out = array_splice($arr['images'], $key, 1);
array_splice($arr['images'], 0, 0, $out);
}
}
echo "<pre>"; print_r($arr); echo "</pre>";
输出:
Array
(
[images] => Array
(
[0] => Array
(
[path] => http://img4.jpg
[type] => photo
[default] => 1
[alt] =>
)
[1] => Array
(
[path] => http://img2.jpg
[type] => photo
[default] => 1
[alt] =>
)
[2] => Array
(
[path] => http://img1.jpg
[type] => logo
[default] =>
[alt] =>
)
[3] => Array
(
[path] => http://img3.jpg
[type] => photo
[default] =>
[alt] =>
)
)
)
希望这能帮助您找到自己想要的方式..!
答案 4 :(得分:0)
如果我猜对了,你正在使用这个&#34;默认&#34;东西只是设置默认图像。为什么不将[default]
键添加到主数组中,您可以在其中存储[images]
数组中默认图像的索引。如果没有设置默认图像,请将null
保留在那里。
$array = array(
'default_image' => 0,
'images' => array(
'0' => array(
'path' => 'http://ssdds.jpg' ,
'type' => 'logo',
'alt' => '',
),
'1' => array(
'path' => 'http://saasdsd.jpg',
'type' => 'photo',
'alt' => '',
),
'2' => array(
'path' => 'http://saddadsasd.jpg',
'type' => 'photo',
'alt' => '',
),
)
);
这样您根本不需要对数组进行过滤或排序。
答案 5 :(得分:0)
您可以使用usort()
对php数组进行排序......
<?php
$dataArray = array(
'id' => 3 ,
'idCategory' => 1 ,
'images' => array (
0 => array (
'path' => 'http://ssdds.jpg' ,
'type' => 'logo',
'default' => false,
),
1 => array (
'path' => 'http://saasdsd.jpg' ,
'type' => 'photo' ,
'default' => true,
) ,
2 => array (
'path' => 'http://saddadsasd.jpg',
'type' => 'photo',
'default' => false,
),
)
);
foreach($dataArray['images'] as $key => $data)
{
if(in_array(1,$data))
{
usort($dataArray['images'], build_sorter('default'));
$dataArray['images'] = $dataArray['images'];
}
}
function build_sorter($key)
{
return function ($a, $b) use ($key) {
return strnatcmp($b[$key], $a[$key]);
};
}
var_dump($dataArray);
这将输出:
array (size=3)
'id' => int 3
'idCategory' => int 1
'images' =>
array (size=3)
0 =>
array (size=3)
'path' => string 'http://saasdsd.jpg' (length=18)
'type' => string 'photo' (length=5)
'default' => boolean true
1 =>
array (size=3)
'path' => string 'http://saddadsasd.jpg' (length=21)
'type' => string 'photo' (length=5)
'default' => boolean false
2 =>
array (size=3)
'path' => string 'http://ssdds.jpg' (length=16)
'type' => string 'logo' (length=4)
'default' => boolean false
<强> LIVE DEMO 强>
答案 6 :(得分:0)
function sortByOrder($a, $b) {
return $b['default'];
}
$picture_arr = array("images" =>
array(
array("path" => "http://image1.jpg", "type" => "logo", "default" => false),
array("path" => "http://image2.jpg", "type" => "logo", "default" => false),
array("path" => "http://image3.jpg", "type" => "logo", "default" => true),
array("path" => "http://image4.jpg", "type" => "logo", "default" => false),
array("path" => "http://image5.jpg", "type" => "logo", "default" => true),
)
);
usort($picture_arr['images'], 'sortByOrder');
这将对您的数组进行排序。